Docs

Packages

@anvia/memory-prisma: Examples

Small examples for Prisma-backed Anvia memory.

Basic memory store

import { createPrismaMemoryStore } from "@anvia/memory-prisma";
import { prisma } from "./db";

export const memory = createPrismaMemoryStore(prisma);

Scoped support agent

import { AgentBuilder } from "@anvia/core";
import { createPrismaMemoryStore } from "@anvia/memory-prisma";

export function createSupportAgent(scope: SupportScope) {
  return new AgentBuilder("support", scope.model)
    .instructions("Answer support questions using the durable conversation history.")
    .tools(scope.tools)
    .memory(
      createPrismaMemoryStore(scope.prisma, {
        scope: { metadataKeys: ["tenantId"] },
      }),
      { savePolicy: "turn" },
    )
    .build();
}

Session run

const response = await agent
  .session(input.conversationId, {
    userId: user.id,
    metadata: { tenantId: user.tenantId },
  })
  .prompt(input.message)
  .send();

Load initial messages

export async function loadThread(input: LoadThreadInput) {
  const agent = createSupportAgent({
    model: input.model,
    prisma: input.prisma,
    tools: input.tools,
  });

  const messages = await agent
    .session(input.conversationId, {
      userId: input.user.id,
      metadata: { tenantId: input.user.tenantId },
    })
    .messages();

  return { messages };
}
import type { Message } from "@anvia/core";
import { initialMessagesFromMemory, useChat } from "@anvia/react";

export function ThreadPage({
  conversationId,
  messages,
}: {
  conversationId: string;
  messages: Message[];
}) {
  const chat = useChat({
    endpoint: `/api/conversations/${conversationId}/chat`,
    initialMessages: initialMessagesFromMemory(messages),
  });

  return <ChatProvider controller={chat}>{/* thread */}</ChatProvider>;
}