mongodb-chatbot-ui
Version:
UI React components for the MongoDB Assistant
124 lines (123 loc) • 4.17 kB
TypeScript
import { type VerifiedAnswer } from "../verifiedAnswer";
import { type References } from "../references";
import { type Promotion } from "../promotions";
export type Role = "user" | "assistant";
export type MessageData = {
id: string;
role: Role;
content: string;
createdAt: string;
rating?: boolean;
references?: References;
promotion?: Promotion;
suggestedPrompts?: string[];
metadata?: AssistantMessageMetadata;
};
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 ConversationData = {
_id: string;
name?: string;
messages: MessageData[];
createdAt: number;
};
export declare const CUSTOM_REQUEST_ORIGIN_HEADER = "X-Request-Origin";
export declare function getCustomRequestOrigin(): string | undefined;
export declare class RetriableError<Data extends object = object> extends Error {
retryAfter: number;
data?: Data;
constructor(message: string, config?: {
retryAfter?: number;
data?: Data;
});
}
export declare class TimeoutError<Data extends object = object> 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;
/**
Options to include with every fetch request made by the ConversationService.
This can be used to set headers, etc.
*/
export type ConversationFetchOptions = Omit<RequestInit, "body" | "method" | "signal">;
export type AddMessageRequestBody = {
message: string;
clientContext?: Record<string, unknown>;
};
export type ConversationServiceConfig = {
serverUrl: string;
fetchOptions?: ConversationFetchOptions | (() => ConversationFetchOptions);
};
export declare class ConversationService {
private serverUrl;
private getFetchOptions;
constructor(config: ConversationServiceConfig);
private mergeHeaders;
private getUrl;
createConversation(): Promise<ConversationData>;
getConversation(conversationId: string): Promise<ConversationData>;
addMessage({ conversationId, message, clientContext, }: {
conversationId: string;
} & AddMessageRequestBody): Promise<MessageData>;
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<void>;
rateMessage({ conversationId, messageId, rating, }: {
conversationId: string;
messageId: string;
rating: boolean;
}): Promise<boolean>;
commentMessage({ conversationId, messageId, comment, }: {
conversationId: string;
messageId: string;
comment: string;
}): Promise<void>;
}