import { type RealtimeIdFactory } from './id.js'; import type { Store } from '../types/store.js'; import type { RealtimeClientEvent, RealtimeConversationStore, ConversationMetrics, RealtimeAnalyticsExport, RealtimeConversation, RealtimeConversationExportFormat, RealtimeConversationOptions, RealtimeEvent, RealtimeProviderName, RealtimeServerEvent } from './types.js'; /** Options for `createRealtimeConversation()`. */ export interface CreateRealtimeConversationOptions { /** Conversation id. Defaults to a generated one. */ id?: string; /** The provider. */ provider: RealtimeProviderName; /** The realtime model. */ model: string; /** ISO-8601 start time. Defaults to now. */ startedAt?: string; /** Application data carried with the record. */ metadata?: Record; /** Creates ids. */ idFactory?: RealtimeIdFactory; } /** Options for `reduceRealtimeConversation()`. */ export interface RealtimeConversationReducerOptions extends RealtimeConversationOptions { /** Creates ids for items the reducer adds. */ idFactory?: RealtimeIdFactory; /** * Applies the event to the record given and returns it, instead of to a copy. For the one owner of * a record no one else holds, as a session holds its own: a copy per event costs the whole record, * which grows with the conversation. */ inPlace?: boolean; } /** Conversation metrics with every counter at zero. */ export declare function createConversationMetrics(): ConversationMetrics; /** Creates an empty, active conversation record. */ export declare function createRealtimeConversation(options: CreateRealtimeConversationOptions): RealtimeConversation; /** * Applies one realtime event to a conversation record and returns the new record. The input is * never mutated. */ export declare function reduceRealtimeConversation(conversation: RealtimeConversation, event: RealtimeEvent, options?: RealtimeConversationReducerOptions): RealtimeConversation; /** Returns a copy of the record with some metrics replaced. */ export declare function withConversationMetrics(conversation: RealtimeConversation, metrics: Partial): RealtimeConversation; /** A deep copy of the record. */ export declare function snapshotRealtimeConversation(conversation: RealtimeConversation): RealtimeConversation; /** The prefix of the item ids a resumed session gives the provider, so their echoes are not recorded twice. */ export declare const REALTIME_REPLAY_PREFIX = "nx_replay_"; /** * A conversation's items as the provider's `conversation.item.create` events, oldest first: what a * resumed session gives a new provider session, so the model knows what was said and what the tools * returned. Speech becomes text from its transcript; interruptions and errors are left out. */ export declare function replayRealtimeConversation(conversation: RealtimeConversation, limit?: number): RealtimeClientEvent[]; /** Conversation records in this process. */ export declare class MemoryRealtimeConversationStore implements RealtimeConversationStore { private readonly records; /** A record, as a copy. */ get(id: string): RealtimeConversation | undefined; /** Writes a record. */ put(conversation: RealtimeConversation): void; } /** Conversation records in any long-term `Store`: the memory, Redis, Postgres, or SQLite store. */ export declare function storeRealtimeConversations(store: Store, options?: { namespace?: readonly string[]; }): RealtimeConversationStore; /** * Exports a record as JSON, the provider's raw events, a readable transcript, or analytics without * transcripts. */ export declare function exportRealtimeConversation(conversation: RealtimeConversation, format: RealtimeConversationExportFormat, rawEvents?: RealtimeServerEvent[]): RealtimeConversation | RealtimeServerEvent[] | string | RealtimeAnalyticsExport;