DatabaseChat
Reference

Client Wrapper

defineDatabaseChat configuration and methods.

defineDatabaseChat creates a DatabaseChatClient that wraps the component endpoints with a consistent API.

import { defineDatabaseChat } from "./components/databaseChat/client";

const chat = defineDatabaseChat(components.databaseChat, {
  model: "openai/gpt-4o",
  systemPrompt: "You are a helpful assistant.",
  toolGuidance: "auto",
  tools,
  maxMessagesForDisplay: 100,
  maxMessagesForLLM: 50,
});

Configuration options

  • model: default model for chat.send (default: openai/gpt-4o).
  • systemPrompt: default prompt for chat.send.
  • toolGuidance: standard tool-result guidance. Use "auto" or omit for generated guidance, "disabled" to opt out, or a custom string to append instead.
  • tools: explicit tool definitions with already-created handler strings.
  • autoTools: generate tools from schema-like definitions.
  • maxMessagesForDisplay: default message limit for getMessages (default: 100).
  • maxMessagesForLLM: default message limit for LLM context (default: 50).

autoTools shape

autoTools: {
  tables: TableInfo[];
  handlers: {
    query: string;
    count: string;
    aggregate?: string;
    search?: string;
    getById?: string;
  };
  allowedTables: string[];
  excludeFields?: Record<string, string[]>;
  tableDescriptions?: Record<string, string>;
  fieldDescriptions?: Record<string, string>;
}

Common methods

  • createConversation(ctx, { externalId, title? })
  • getConversation(ctx, conversationId)
  • listConversations(ctx, externalId)
  • getMessages(ctx, conversationId)
  • getStreamState(ctx, conversationId)
  • getStreamDeltas(ctx, streamId, cursor)
  • abortStream(ctx, conversationId, reason?)
  • send(ctx, { conversationId, message, apiKey, model?, systemPrompt?, toolGuidance?, toolContext? })

Advanced methods

  • addMessage(ctx, conversationId, role, content, { toolCalls?, toolResults? })
  • getMessagesForLLM(ctx, conversationId, { systemPrompt?, includeTools?, toolGuidance? })
  • getTools() and getToolsForLLM()
  • getSystemPromptWithTools(basePrompt?, toolGuidance?)

Runtime function handles

Convex createFunctionHandle(...) is asynchronous and should be called inside a Convex function. If your app builds tool handles at request time, call components.databaseChat.chat.send directly and pass config.tools from that action. Use defineDatabaseChat when your tool handler strings are already available at construction time.