import { OpenAI } from "openai"; import WebSocket from "ws"; import ioredis from "ioredis"; import { type ChatCompletionMessageParam } from "openai/resources/chat/completions"; import { YpBaseChatBot } from "../../services/llms/baseChatBot.js"; import { YpAgentProduct } from "../models/agentProduct.js"; /** * Common modes that implementations might use */ export declare enum CommonModes { ErrorRecovery = "error_recovery" } export declare abstract class YpBaseAssistant extends YpBaseChatBot { protected voiceEnabled: boolean; openaiClient: OpenAI; memory: YpBaseAssistantMemoryData; private eventEmitter; persistMemory: boolean; domainId: number; DEBUG: boolean; protected modes: Map; protected availableTools: Map; protected toolCallTimeout: number; protected maxModeTransitions: number; private clientSystemMessageListener; redis: ioredis.Redis; modelName: string; constructor(wsClientId: string, wsClients: Map, redis: ioredis.Redis, redisKey: string, domainId: number); destroy(): void; removeClientSystemMessageListener(): void; handleClientSystemMessage(data: Buffer): void; setupClientSystemMessageListener(): void; getCurrentAgentProduct(): Promise; getCurrentSubscriptionPlan(): Promise; getCurrentSubscription(): Promise; getCurrentAgentRun(): Promise; updateAiModelSession(message: string): Promise; maybeSendTextResponse(message: string): Promise; processClientSystemMessage(clientEvent: YpAssistantClientSystemMessage): Promise; emit(event: string, ...args: any[]): boolean; on(event: string, listener: (...args: any[]) => void): void; updateCurrentAgentProductPlan(subscriptionPlanId: number, subscriptionId: number | null): Promise; /** * Convert tool result to message format */ protected convertToolResultToMessage(toolCall: ToolCall, result: ToolExecutionResult): ToolResponseMessage; /** * Handle executing tool calls with results */ handleToolCalls(toolCalls: Map): Promise; /** * Handle tool responses by creating a new completion */ handleToolResponses(toolResponses: ToolResponseMessage[]): Promise; /** * Abstract method that subclasses must implement to define their modes */ abstract defineAvailableModes(): Promise; setupMemoryAsync(): Promise; loadMemoryAsync(): Promise; getCleanedParams(params: string | T): T; setCurrentMode(mode: YpAssistantMode): Promise; /** * Initialize modes from subclass definitions */ initializeModes(): Promise; /** * Get current mode's functions */ getCurrentModeFunctions(): AssistantChatbotTool[]; get isLoggedIn(): boolean; renderLoginStatus(): string; defaultSystemPrompt: string; /** * Get current mode's system prompt */ getCurrentSystemPrompt(): string; sendAvatarUrlChange(url: string | null, avatarName: string | null): void; /** * Validate mode transition */ protected validateModeTransition(fromMode: YpAssistantMode, toMode: YpAssistantMode): boolean; /** * Clean up mode-specific resources */ protected cleanupMode(mode: YpAssistantMode): Promise; /** * Set mode data with type safety */ setModeData(type: string, data: T): Promise; /** * Get mode data with type safety */ protected getModeData(): T | undefined; /** * Main conversation handler with updated function handling */ conversation(chatLog: YpSimpleChatLog[]): Promise; getAgentProduct(agentProductId: number): Promise; /** * Convert chat log to OpenAI message format */ protected convertToOpenAIMessages(chatLog: YpSimpleChatLog[]): ChatCompletionMessageParam[]; /** * Handle mode switching */ handleModeSwitch(newMode: YpAssistantMode, reason: string, params: any): Promise; addUserMessage(message: string): Promise; addAssistantMessage(message: string): Promise; addAssistantHtmlMessage(html: string, uniqueToken?: string): Promise; /** * Handle streaming responses and function calls with comprehensive debugging */ streamWebSocketResponses(stream: AsyncIterable): Promise; }