@aituber-onair/core
Version:
Core library for AITuber OnAir providing voice synthesis and chat processing
223 lines (222 loc) • 7.51 kB
TypeScript
import { EventEmitter } from './EventEmitter';
import { ChatProcessorOptions } from './ChatProcessor';
import { MemoryOptions } from './MemoryManager';
import { ChatProviderName, ChatServiceOptionsByProvider } from '@aituber-onair/chat';
import { VoiceServiceOptions, VoiceServiceOptionsUpdate } from '@aituber-onair/voice';
import { Message, ToolDefinition, MCPServerConfig } from '@aituber-onair/chat';
import { MemoryStorage } from '../types';
/**
* Setting options for AITuberOnAirCore
*/
export type SpeechChunkLocale = 'ja' | 'en' | 'ko' | 'zh' | 'all';
export interface SpeechChunkingOptions {
/** Enable or disable speech chunking. Defaults to false (disabled). */
enabled?: boolean;
/** Minimum words (approx.) per speech chunk. Set to 0 or omit to disable merging. */
minWords?: number;
/** Locale preset used to decide punctuation delimiters. */
locale?: SpeechChunkLocale;
/** Custom separator characters (overrides locale preset). */
separators?: string[];
}
export interface AITuberOnAirCoreOptions {
/** AI provider name */
chatProvider?: ChatProviderName;
/** AI API key */
apiKey: string;
/** AI model name (default is provider's default model) */
model?: string;
/** ChatProcessor options */
chatOptions: Omit<ChatProcessorOptions, 'useMemory'>;
/** Memory options (disabled by default) */
memoryOptions?: MemoryOptions;
/** Memory storage for persistence (optional) */
memoryStorage?: MemoryStorage;
/** Voice service options */
voiceOptions?: VoiceServiceOptions;
/** Speech chunking behaviour */
speechChunking?: SpeechChunkingOptions;
/** Debug mode */
debug?: boolean;
/** ChatService provider-specific options (optional) */
providerOptions?: Omit<ChatServiceOptionsByProvider[ChatProviderName], 'apiKey' | 'model' | 'tools'>;
/** Tools */
tools?: {
definition: ToolDefinition;
handler: (input: any) => Promise<any>;
}[];
/** MCP servers configuration (OpenAI, Claude, and Gemini) */
mcpServers?: MCPServerConfig[];
}
/**
* Event types for AITuberOnAirCore
*/
export declare enum AITuberOnAirCoreEvent {
/** Processing started */
PROCESSING_START = "processingStart",
/** Processing ended */
PROCESSING_END = "processingEnd",
/** Assistant (partial) response */
ASSISTANT_PARTIAL = "assistantPartial",
/** Assistant response completed */
ASSISTANT_RESPONSE = "assistantResponse",
/** Speech started */
SPEECH_START = "speechStart",
/** Speech ended */
SPEECH_END = "speechEnd",
/** Error occurred */
ERROR = "error",
/** Tool use */
TOOL_USE = "toolUse",
/** Tool result */
TOOL_RESULT = "toolResult",
/** Chat history set */
CHAT_HISTORY_SET = "chatHistorySet",
/** Chat history cleared */
CHAT_HISTORY_CLEARED = "chatHistoryCleared",
/** Memory created */
MEMORY_CREATED = "memoryCreated",
/** Memory removed */
MEMORY_REMOVED = "memoryRemoved",
/** Memory loaded */
MEMORY_LOADED = "memoryLoaded",
/** Memory saved */
MEMORY_SAVED = "memorySaved",
/** Storage cleared */
STORAGE_CLEARED = "storageCleared"
}
/**
* AITuberOnAirCore is a core class that integrates the main features of AITuber
* - Chat processing (ChatService, ChatProcessor)
* - Speech synthesis (VoiceService)
* - Memory management (MemoryManager)
*/
export declare class AITuberOnAirCore extends EventEmitter {
private chatService;
private chatProcessor;
private memoryManager?;
private voiceService?;
private isProcessing;
private debug;
private toolExecutor;
private speechChunkEnabled;
private speechChunkMinWords;
private speechChunkLocale;
private speechChunkSeparators?;
/**
* Constructor
* @param options Configuration options
*/
constructor(options: AITuberOnAirCoreOptions);
private buildChatServiceOptions;
/**
* Process text chat
* @param text User input text
* @returns Success or failure of processing
*/
processChat(text: string): Promise<boolean>;
/**
* Process image-based chat
* @param imageDataUrl Image data URL
* @param visionPrompt Custom prompt for describing the image (optional)
* @returns Success or failure of processing
*/
processVisionChat(imageDataUrl: string, visionPrompt?: string): Promise<boolean>;
private withProcessing;
/**
* Stop speech playback
*/
stopSpeech(): void;
/**
* Get chat history
*/
getChatHistory(): Message[];
/**
* Set chat history from external source
* @param messages Message array to set as chat history
*/
setChatHistory(messages: Message[]): void;
/**
* Clear chat history
*/
clearChatHistory(): void;
/**
* Update voice service
* @param options New voice service options
*/
updateVoiceService(options: VoiceServiceOptions): void;
/**
* Update speech chunking behaviour
*/
updateSpeechChunking(options: SpeechChunkingOptions): void;
/**
* Speak text with custom voice options
* @param text Text to speak
* @param options Speech options
* @returns Promise that resolves when speech is complete
*/
speakTextWithOptions(text: string, options?: {
enableAnimation?: boolean;
temporaryVoiceOptions?: VoiceServiceOptionsUpdate;
audioElementId?: string;
}): Promise<void>;
/**
* Setup forwarding of ChatProcessor events
*/
private setupEventForwarding;
/**
* Handle tool use
* @param blocks Tool use blocks
* @returns Tool result blocks
*/
private handleToolUse;
/**
* Split screenplay text into smaller chunks for sequential speech synthesis.
* Falls back to the original text when no delimiters are present.
*/
private splitTextForSpeech;
private getActiveSpeechSeparators;
private segmentTextBySeparators;
private countApproxWords;
/**
* Output debug log (only in debug mode)
*/
private log;
/**
* Generate new content based on the system prompt and the provided message history (one-shot).
* The provided message history is used only for this generation and does not affect the internal chat history.
* This is ideal for generating standalone content like blog posts, reports, or summaries from existing conversations.
*
* @param prompt The system prompt to guide the content generation
* @param messageHistory The message history to use as context
* @returns The generated content as a string
*/
generateOneShotContentFromHistory(prompt: string, messageHistory: Message[]): Promise<string>;
/**
* Check if memory functionality is enabled
*/
isMemoryEnabled(): boolean;
/**
* Remove all event listeners
*/
offAll(): void;
/**
* Get current provider information
* @returns Provider information object
*/
getProviderInfo(): {
name: string;
model?: string;
};
/**
* Get list of available providers
* @returns Array of available provider names
*/
static getAvailableProviders(): string[];
/**
* Get list of models supported by the specified provider
* @param providerName Provider name
* @returns Array of supported models
*/
static getSupportedModels(providerName: string): string[];
}