UNPKG

@aituber-onair/core

Version:

Core library for AITuber OnAir providing voice synthesis and chat processing

72 lines (71 loc) 2.67 kB
import { ChatService } from '../../ChatService'; import { Message, MessageWithVision, ToolChatCompletion, ToolDefinition } from '../../../../types'; /** * Gemini implementation of ChatService */ export declare class GeminiChatService implements ChatService { /** Provider name */ readonly provider: string; private apiKey; private model; private visionModel; private tools; /** id(OpenAI) → name(Gemini) mapping */ private callIdMap; private safeJsonParse; private normalizeToolResult; /** * camelCase → snake_case conversion (v1beta) */ private adaptKeysForApi; /** * Constructor * @param apiKey Google API key * @param model Name of the model to use * @param visionModel Name of the vision model */ constructor(apiKey: string, model?: string, visionModel?: string, tools?: ToolDefinition[]); /** * Get the current model name * @returns Model name */ getModel(): string; /** * Get the current vision model name * @returns Vision model name */ getVisionModel(): string; /** * Process chat messages * @param messages Array of messages to send * @param onPartialResponse Callback to receive each part of streaming response * @param onCompleteResponse Callback to execute when response is complete */ processChat(messages: Message[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>; processVisionChat(messages: MessageWithVision[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>; private convertMessagesToGeminiFormat; private callGemini; /** * Convert AITuber OnAir vision messages to Gemini format * @param messages Array of vision messages * @returns Gemini formatted vision messages */ private convertVisionMessagesToGeminiFormat; /** * Convert Blob to Base64 string * @param blob Image blob * @returns Promise with base64 encoded string */ private blobToBase64; /** * Map AITuber OnAir roles to Gemini roles * @param role AITuber OnAir role * @returns Gemini role */ private mapRoleToGemini; private parseStream; private parseOneShot; chatOnce(messages: Message[], stream?: boolean, onPartialResponse?: (t: string) => void, maxTokens?: number): Promise<ToolChatCompletion>; visionChatOnce(messages: MessageWithVision[], stream?: boolean, onPartialResponse?: (t: string) => void, maxTokens?: number): Promise<ToolChatCompletion>; private genUUID; }