Skip to main content
PraisonAI TypeScript provides a database adapter protocol for persisting sessions, messages, runs, and traces.

Installation

npm install praisonai

Memory Adapter (Default)

import { MemoryDbAdapter, db } from 'praisonai';

// Create memory adapter
const adapter = new MemoryDbAdapter();
await adapter.connect();

// Or use the shortcut
const adapter2 = db({ type: 'memory' });

Session Operations

const adapter = db({ type: 'memory' });
await adapter.connect();

// Create session
await adapter.createSession({
  id: 'session-1',
  createdAt: Date.now(),
  updatedAt: Date.now(),
  metadata: { userId: 'user-123' }
});

// Get session
const session = await adapter.getSession('session-1');

// Update session
await adapter.updateSession('session-1', { 
  metadata: { lastActive: Date.now() } 
});

// List sessions
const sessions = await adapter.listSessions(10, 0);

// Delete session
await adapter.deleteSession('session-1');

Message Operations

// Save message
await adapter.saveMessage({
  id: 'msg-1',
  sessionId: 'session-1',
  role: 'user',
  content: 'Hello!',
  createdAt: Date.now()
});

await adapter.saveMessage({
  id: 'msg-2',
  sessionId: 'session-1',
  role: 'assistant',
  content: 'Hi there!',
  createdAt: Date.now()
});

// Get messages (last N)
const messages = await adapter.getMessages('session-1', 50);

// Delete all messages in session
await adapter.deleteMessages('session-1');

Run Operations

// Create run
await adapter.createRun({
  id: 'run-1',
  sessionId: 'session-1',
  status: 'running',
  startedAt: Date.now()
});

// Update run
await adapter.updateRun('run-1', {
  status: 'completed',
  completedAt: Date.now(),
  tokenUsage: {
    promptTokens: 100,
    completionTokens: 50,
    totalTokens: 150
  }
});

// Get run
const run = await adapter.getRun('run-1');

// List runs for session
const runs = await adapter.listRuns('session-1', 10);

Tool Call Operations

// Save tool call
await adapter.saveToolCall({
  id: 'tc-1',
  runId: 'run-1',
  name: 'calculator',
  arguments: '{"a": 1, "b": 2}',
  status: 'completed',
  result: '3',
  startedAt: Date.now(),
  completedAt: Date.now()
});

// Get tool calls for run
const toolCalls = await adapter.getToolCalls('run-1');

Trace Operations

// Create trace
await adapter.createTrace({
  id: 'trace-1',
  sessionId: 'session-1',
  runId: 'run-1',
  startedAt: Date.now(),
  status: 'running'
});

// Create span
await adapter.createSpan({
  id: 'span-1',
  traceId: 'trace-1',
  name: 'llm_call',
  startedAt: Date.now(),
  status: 'running'
});

// Update span
await adapter.updateSpan('span-1', {
  status: 'completed',
  completedAt: Date.now(),
  attributes: { model: 'gpt-4o', tokens: 100 }
});

// Get spans
const spans = await adapter.getSpans('trace-1');

Adapter Protocol

import type { DbAdapter } from 'praisonai';

// Implement custom adapter
class MyCustomAdapter implements DbAdapter {
  async connect(): Promise<void> { /* ... */ }
  async disconnect(): Promise<void> { /* ... */ }
  isConnected(): boolean { /* ... */ }
  
  // Session operations
  async createSession(session: DbSession): Promise<void> { /* ... */ }
  async getSession(id: string): Promise<DbSession | null> { /* ... */ }
  // ... other methods
}

Lifecycle

const adapter = db({ type: 'memory' });

// Connect
await adapter.connect();
console.log('Connected:', adapter.isConnected());

// Use adapter...

// Disconnect
await adapter.disconnect();