Add dynamic Persona memory recall to Face interpreter
This commit is contained in:
parent
c779f4915f
commit
d9524cbe35
3 changed files with 146 additions and 0 deletions
70
scripts/smoke-persona-dynamic-memory-recall.mjs
Normal file
70
scripts/smoke-persona-dynamic-memory-recall.mjs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env node
|
||||
import "dotenv/config";
|
||||
|
||||
import { loadConfig } from "@voidbot/config";
|
||||
import {
|
||||
createTextEmbedder,
|
||||
createVectorStores,
|
||||
RetrievalService,
|
||||
} from "@voidbot/rag";
|
||||
|
||||
if (!process.env.DISCORD_OWNER_ID) {
|
||||
process.env.DISCORD_OWNER_ID = "__persona_dynamic_memory_smoke__";
|
||||
}
|
||||
|
||||
const identityId = readArg("--identity") ?? "metame";
|
||||
const query = readArg("--query")
|
||||
?? "My week was about consent, body and home boundaries, Emily helping through dissociation, Wayne failing support, Lobo threatening retaliation, and evidence preservation.";
|
||||
|
||||
const config = loadConfig();
|
||||
const embedder = createTextEmbedder({
|
||||
backend: config.ragEmbeddingBackend,
|
||||
hashDimensions: config.ragEmbeddingDimensions,
|
||||
ollamaBaseUrl: config.ragOllamaBaseUrl,
|
||||
ollamaModel: config.ragOllamaModel,
|
||||
ollamaTimeoutMs: config.ragOllamaTimeoutMs,
|
||||
queryInstruction: "Given a Face's current train of thought, retrieve relevant memories, bonds, needs, status reads, and doctrine from this Persona's own typed state.",
|
||||
});
|
||||
const stores = createVectorStores({
|
||||
kind: config.vectorStore.kind,
|
||||
historyPath: config.vectorStore.path,
|
||||
personaMemoryPath: config.vectorStore.personaMemoryPath,
|
||||
sourceRoot: config.sourceVectorStoreRoot,
|
||||
qdrant: config.qdrant,
|
||||
historyEmbedder: embedder,
|
||||
sourceEmbedder: embedder,
|
||||
personaMemoryEmbedder: embedder,
|
||||
});
|
||||
const retrieval = new RetrievalService(stores.history, stores.source, stores.personaMemory);
|
||||
const results = await retrieval.searchPersonaMemory(query, 12, { identityId });
|
||||
|
||||
const combined = results.map((result) => result.text).join("\n");
|
||||
const summary = {
|
||||
ok: results.length > 0,
|
||||
identityId,
|
||||
vectorStoreKind: config.vectorStore.kind,
|
||||
resultCount: results.length,
|
||||
hasEmily: /Emily/i.test(combined),
|
||||
hasWayne: /Wayne/i.test(combined),
|
||||
hasLobo: /Lobo/i.test(combined),
|
||||
hasConsent: /consent/i.test(combined),
|
||||
};
|
||||
|
||||
console.log(JSON.stringify(summary, null, 2));
|
||||
for (const [index, result] of results.entries()) {
|
||||
console.log(`--- ${index + 1} ${result.score.toFixed(3)} ${result.metadata.targetLabel ?? result.metadata.targetId}/${result.metadata.memoryKind}`);
|
||||
console.log(result.text.slice(0, 700));
|
||||
}
|
||||
|
||||
if (!summary.ok || !summary.hasEmily || !summary.hasWayne || !summary.hasLobo || !summary.hasConsent) {
|
||||
process.exitCode = 1;
|
||||
}
|
||||
|
||||
function readArg(name) {
|
||||
const index = process.argv.indexOf(name);
|
||||
if (index < 0) {
|
||||
return undefined;
|
||||
}
|
||||
const value = process.argv[index + 1];
|
||||
return value && !value.startsWith("--") ? value : undefined;
|
||||
}
|
||||
Loading…
Reference in a new issue