@aituber-onair/core
Version:
Core library for AITuber OnAir providing voice synthesis and chat processing
72 lines (71 loc) • 2.67 kB
TypeScript
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;
}