@varunmhajan/hom-i-voice-ai
Version:
Voice AI utilities for home loan assistance with India-specific formatting
143 lines • 4.29 kB
TypeScript
import { EventEmitter } from 'eventemitter3';
export interface VoiceConfig {
apiKey: string;
baseUrl?: string;
language?: string;
voiceId?: string;
audioFormat?: 'mp3' | 'wav' | 'ogg';
priority?: 'speed' | 'quality' | 'balanced';
mode?: 'full-voice' | 'stt-only' | 'tts-only' | 'auto';
enableSTT?: boolean;
enableTTS?: boolean;
autoPlay?: boolean;
enableCompression?: boolean;
enableCaching?: boolean;
chunkSize?: number;
maxCacheSize?: number;
timeout?: number;
retryAttempts?: number;
ultraFastMode?: boolean;
preloadVoices?: boolean;
enableWebWorkers?: boolean;
}
export interface ConversationMessage {
role: 'user' | 'assistant';
content: string;
timestamp: Date;
type: 'text' | 'voice' | 'call';
audioData?: string;
metadata?: Record<string, unknown>;
}
export interface VoiceResponse {
success: boolean;
message?: string;
audio?: string;
audioData?: {
audio: string;
mimeType: string;
duration?: number;
};
conversationHistory?: ConversationMessage[];
metadata?: {
processingTime: number;
endpoint: string;
model?: string;
cached?: boolean;
};
error?: string;
}
export interface AudioInput {
audio: string;
mimeType: string;
}
/**
* Ultra-fast Voice AI Client with minimal latency optimizations
*/
export declare class VoiceClient extends EventEmitter {
private config;
private conversationHistory;
private audioCache;
private isProcessing;
private requestQueue;
private processingQueue;
private abortController?;
private performanceMetrics;
constructor(config: VoiceConfig);
private initializeOptimizations;
private verifyApiKey;
private preloadVoiceModels;
private initializeWebWorkers;
/**
* Send voice message with ultra-fast processing
*/
sendVoiceMessage(input: Blob | File | AudioInput | string, options?: Partial<VoiceConfig>): Promise<VoiceResponse>;
/**
* Send text message optimized for speed
*/
sendTextMessage(text: string, options?: Partial<VoiceConfig>): Promise<VoiceResponse>;
/**
* Transcribe audio only (no TTS response)
*/
transcribeAudio(audioInput: Blob | File | AudioInput, options?: Partial<VoiceConfig>): Promise<VoiceResponse>;
/**
* Convert text to speech with caching
*/
textToSpeech(text: string, options?: Partial<VoiceConfig>): Promise<VoiceResponse>;
/**
* Play audio with optimized loading
*/
playAudio(audioData: string): Promise<void>;
private prepareRequestBody;
private makeRequest;
private generateCacheKey;
private getCachedResponse;
private cacheResponse;
private manageCacheSize;
private updatePerformanceMetrics;
private handleError;
private blobToBase64;
getConversationHistory(): ConversationMessage[];
clearConversationHistory(): void;
clearCache(): void;
getPerformanceMetrics(): {
averageLatency: number;
requestCount: number;
cacheHitRate: number;
errorRate: number;
};
getStatus(): {
isProcessing: boolean;
cacheSize: number;
conversationLength: number;
config: {
apiKey: string;
baseUrl: string;
language: string;
voiceId: string;
audioFormat: "mp3" | "wav" | "ogg";
priority: "speed" | "quality" | "balanced";
mode: "full-voice" | "stt-only" | "tts-only" | "auto";
enableSTT: boolean;
enableTTS: boolean;
autoPlay: boolean;
enableCompression: boolean;
enableCaching: boolean;
chunkSize: number;
maxCacheSize: number;
timeout: number;
retryAttempts: number;
ultraFastMode: boolean;
preloadVoices: boolean;
enableWebWorkers: boolean;
};
performance: {
averageLatency: number;
requestCount: number;
cacheHitRate: number;
errorRate: number;
};
};
updateConfig(updates: Partial<VoiceConfig>): void;
destroy(): void;
}
//# sourceMappingURL=VoiceClient.d.ts.map