@klever-one/web-sdk
Version:
Web SDK for integrating real-time room management and streaming functionality into web applications
91 lines (90 loc) • 3.23 kB
TypeScript
import { ConversationConfig } from '../types/client.types';
import { Message, ConversationEventData, ConversationEventHandler } from '../types/message.types';
/**
* ConversationManager - Core conversation service for SDK usage
* Handles conversation flow, TTS processing, and message management
*/
export declare class ConversationManager {
private static instance;
private roomManager;
private wavManager;
private recorderService;
private streamingOrchestrator;
private conversationStateService;
private eventBus;
private messages;
private isStreaming;
private isCompleted;
private sentenceBuffer;
private messageQueue;
private isProcessing;
private streamingTimeout;
private processedSentenceIndices;
private pendingUpdateMessages;
private hasWelcomeMessageSent;
private config;
private eventHandlers;
private errorHandlers;
private constructor();
static getInstance(): ConversationManager;
initialize(config: ConversationConfig, initialMessages?: Message[], apiKey?: string): void;
subscribe(handler: ConversationEventHandler): () => void;
subscribeToErrors(handler: (error: Error) => void): () => void;
sendTextMessage(input: string): Promise<void>;
sendAudioMessage(audioBlob: Blob): Promise<void>;
getState(): ConversationEventData;
clear(): void;
destroy(): void;
sendWelcomeMessage(): Promise<void>;
triggerNextReady(): {
text: string;
index: number;
} | null;
getReadyCount(): number;
getTotalCount(): number;
isAllReady(): boolean;
/**
* 실제 스트리밍 완료 상태를 체크합니다.
* 웹뷰 환경에서도 안정적으로 동작하도록 단순화된 조건을 사용합니다.
*/
private checkStreamingComplete;
/**
* 모든 TTS 처리가 완료되었는지 확인합니다.
*
* 확인 조건:
* 1. 모든 문장이 준비 완료 상태 (conversationStateService.isAllReady())
* 2. 처리 중인 문장 버퍼가 비어있음 (sentenceBuffer === "")
* 3. 화면 표시 대기 중인 메시지 큐가 비어있음 (messageQueue.length === 0)
*/
isAllTTSCompleted(): boolean;
setSentenceReady(index: number): void;
private setupEventListeners;
private handleRoomMessage;
private setupMessageQueueProcessor;
private handleOpenAiMessage;
private handleAzureSttOpenAiMessage;
private handleStreamingComplete;
private handleError;
private processSentenceBuffer;
private extractCompleteSentences;
private processTTS;
private normalizeForTTS;
private handleUpdateMessageEvent;
private clearScheduledTick;
private scheduleStreamingCompletionCheck;
private processQueue;
private splitTextWithPunctuation;
private updateMessage;
private addMessage;
private prepareNewMessage;
private resetState;
private clearMessageQueue;
private setStreaming;
/**
* 타임아웃 시 강제로 스트리밍을 종료합니다.
* 웹뷰 환경에서 무한 스트리밍을 방지하기 위한 안전장치입니다.
*/
private setCompleted;
private notifyHandlers;
private delay;
}