WOLBΛRG

rememberFromMessages()

Experimental conversation → memory bridge — store chat turns as memories (raw or LLM extract).

Signature

/** @experimental until 1.0 */
rememberFromMessages(
  messages: ConversationMessage[],
  options: RememberFromMessagesOptions,
): Promise<RememberResult[]>

interface ConversationMessage {
  role: string;
  content: string;
}

interface RememberFromMessagesOptions {
  agent: string;
  /** Default: "raw" */
  mode?: "raw" | "extract";
  /** Default: "last_user" — only for mode "raw" */
  rawStrategy?: "last_user" | "all_user";
  metadata?: Record<string, unknown>;
  dedupe?: boolean | MemoryDedupeConfig;
}

Stability: experimental until 1.0. Prefer pinning your wolbarg version if you depend on this shape.

Modes

ModeLLM required?Behavior
raw (default)NoStore user message text (last_user or all_user)
extractYes (llm in constructor)Short prompt → one fact per line → remember() each

Example — raw (no LLM)

const saved = await ctx.rememberFromMessages(
  [
    { role: "user", content: "I prefer dark mode" },
    { role: "assistant", content: "Noted." },
    { role: "user", content: "Deploy only on Fridays" },
  ],
  { agent: "assistant" },
);

// Default rawStrategy is last_user → one memory:
console.log(saved[0]?.content.text); // "Deploy only on Fridays"

Example — extract (optional LLM)

import { wolbarg, sqlite, openaiEmbedding, openaiLlm } from "wolbarg";

const ctx = wolbarg({
  organization: "demo",
  storage: sqlite("./memory.db"),
  embedding: openaiEmbedding({
    apiKey: process.env.OPENAI_API_KEY!,
    model: "text-embedding-3-small",
  }),
  llm: openaiLlm({
    apiKey: process.env.OPENAI_API_KEY!,
    model: "gpt-4.1-mini",
  }),
});

const facts = await ctx.rememberFromMessages(
  [
    { role: "user", content: "I live in Berlin and prefer tea over coffee." },
    { role: "assistant", content: "Got it." },
  ],
  { agent: "assistant", mode: "extract" },
);

Without llm, mode: "extract" throws ProviderNotConfiguredError.

Chat → memory → recall

await ctx.rememberFromMessages(messages, { agent: "assistant", mode: "raw" });

const hits = await ctx.recall({
  query: "What UI theme does the user like?",
  topK: 3,
  filter: { agent: "assistant" },
});