import { type References } from "../references"; import { type Promotion } from "../promotions"; import { type VerifiedAnswer } from "../verifiedAnswer"; export type Role = "user" | "assistant"; export type AssistantMessageMetadata = { [k: string]: unknown; /** The conversation ID that this message is part of. If you add a message without specifying a conversation ID, which creates a new conversation, this field contains the ID of the new conversation. */ conversationId?: string; /** If the message came from the verified answers collection, contains the metadata about the verified answer. */ verifiedAnswer?: { _id: VerifiedAnswer["_id"]; created: string; updated: string | undefined; }; }; export type MessageData = { id: string; role: Role; content: string; createdAt: string; rating?: boolean; references?: References; promotion?: Promotion; suggestedPrompts?: string[]; metadata?: AssistantMessageMetadata; }; export type ConversationData = { _id: string; name?: string; messages: MessageData[]; createdAt: number; }; /** Options to include with every fetch request made by a service. This can be used to set headers, etc. */ export type ConversationFetchOptions = Omit; export type AddMessageRequestBody = { message: string; clientContext?: Record; /** Responses API stateful continuity parameter for a server-issued conversation ID. */ conversation?: string; /** Responses API stateful continuity fallback for the previous response ID. Use this only when no server conversation ID is available yet. */ previousResponseId?: string; /** Responses API stateless mode: full conversation context from current client state. */ historyMessages?: MessageData[]; }; /** * Common options for HTTP requests (headers, credentials, etc.) */ export type HttpOptions = { /** * Headers to include with requests. Can be static or a function for dynamic headers. */ headers?: HeadersInit | (() => HeadersInit); /** * Credentials mode for requests. */ credentials?: RequestCredentials; }; /** * Configuration for the legacy Conversations API. */ export type ConversationsApiConfig = HttpOptions & { type: "conversations"; }; export interface ChatService { createConversation(): Promise; getConversation(conversationId: string): Promise; addMessage(args: { conversationId: string; } & AddMessageRequestBody): Promise; addMessageStreaming(args: { conversationId: string; maxRetries?: number; onResponseDelta: (delta: string) => void; onReferences: (references: References) => void; onPromotion: (promotion: Promotion) => void; onMetadata: (metadata: AssistantMessageMetadata) => void; onResponseFinished: (messageId: string) => void; signal?: AbortSignal; } & AddMessageRequestBody): Promise; rateMessage(args: { conversationId: string; messageId: string; rating: boolean; }): Promise; commentMessage(args: { conversationId: string; messageId: string; comment: string; }): Promise; } export declare const CUSTOM_REQUEST_ORIGIN_HEADER = "X-Request-Origin"; export declare function getCustomRequestOrigin(): string | undefined; export declare class RetriableError extends Error { retryAfter: number; data?: Data; constructor(message: string, config?: { retryAfter?: number; data?: Data; }); } export declare class TimeoutError extends Error { data?: Data; constructor(message: string); } export type UnknownStreamEvent = { type: string; data: unknown; }; export type DeltaStreamEvent = { type: "delta"; data: string; }; export type ReferencesStreamEvent = { type: "references"; data: References; }; export type PromotionStreamEvent = { type: "promotion"; data: Promotion; }; export type MetadataStreamEvent = { type: "metadata"; data: AssistantMessageMetadata; }; export type FinishedStreamEvent = { type: "finished"; data: string; }; export type ConversationStreamEvent = DeltaStreamEvent | ReferencesStreamEvent | PromotionStreamEvent | MetadataStreamEvent | FinishedStreamEvent; export type ConversationServiceConfig = { serverUrl: string; fetchOptions?: ConversationFetchOptions | (() => ConversationFetchOptions); }; export declare class ConversationService implements ChatService { private serverUrl; private getFetchOptions; constructor(config: ConversationServiceConfig); private mergeHeaders; private getUrl; createConversation(): Promise; getConversation(conversationId: string): Promise; addMessage({ conversationId, message, clientContext, }: { conversationId: string; } & AddMessageRequestBody): Promise; addMessageStreaming({ conversationId, message, clientContext, maxRetries, onResponseDelta, onReferences, onPromotion, onMetadata, onResponseFinished, signal, }: { conversationId: string; maxRetries?: number; onResponseDelta: (delta: string) => void; onReferences: (references: References) => void; onPromotion: (promotion: Promotion) => void; onMetadata: (metadata: AssistantMessageMetadata) => void; onResponseFinished: (messageId: string) => void; signal?: AbortSignal; } & AddMessageRequestBody): Promise; rateMessage({ conversationId, messageId, rating, }: { conversationId: string; messageId: string; rating: boolean; }): Promise; commentMessage({ conversationId, messageId, comment, }: { conversationId: string; messageId: string; comment: string; }): Promise; }