{"version":3,"sources":["../../src/tools/types.ts","../../src/models.ts","../../src/exceptions.ts","../../src/client.ts","../../src/tools/generic-tools.ts","../../src/tools/openai-tools.ts","../../src/tools/langchain-tools.ts","../../src/tools/autogen-tools.ts"],"names":["ALL_VOICES","LANGUAGES"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Shared types for LangVoice tools\r\n */\r\n\r\n// ============================================\r\n// Common Types\r\n// ============================================\r\n\r\n/**\r\n * Base result interface for all tool operations\r\n */\r\nexport interface BaseToolResult {\r\n  success: boolean;\r\n  error?: string;\r\n}\r\n\r\n/**\r\n * Result from TTS generation tools\r\n */\r\nexport interface TTSResult extends BaseToolResult {\r\n  audioBase64?: string;\r\n  audioBuffer?: Buffer;\r\n  duration?: number;\r\n  generationTime?: number;\r\n  charactersProcessed?: number;\r\n}\r\n\r\n/**\r\n * Result from list voices tool\r\n */\r\nexport interface VoicesResult extends BaseToolResult {\r\n  voices?: VoiceInfo[];\r\n}\r\n\r\n/**\r\n * Result from list languages tool\r\n */\r\nexport interface LanguagesResult extends BaseToolResult {\r\n  languages?: LanguageInfo[];\r\n}\r\n\r\n/**\r\n * Voice information\r\n */\r\nexport interface VoiceInfo {\r\n  id: string;\r\n  name: string;\r\n  gender?: string;\r\n  language?: string;\r\n  description?: string;\r\n}\r\n\r\n/**\r\n * Language information\r\n */\r\nexport interface LanguageInfo {\r\n  id: string;\r\n  name: string;\r\n  voices?: string[];\r\n}\r\n\r\n// ============================================\r\n// Tool Input Types\r\n// ============================================\r\n\r\n/**\r\n * Input for text-to-speech generation\r\n */\r\nexport interface TTSInput {\r\n  text: string;\r\n  voice?: string;\r\n  language?: string;\r\n  speed?: number;\r\n}\r\n\r\n/**\r\n * Input for multi-voice generation\r\n */\r\nexport interface MultiVoiceInput {\r\n  text: string;\r\n  language?: string;\r\n  speed?: number;\r\n}\r\n\r\n// ============================================\r\n// Function Schema Types\r\n// ============================================\r\n\r\n/**\r\n * JSON Schema property definition\r\n */\r\nexport interface SchemaProperty {\r\n  type: string;\r\n  description?: string;\r\n  enum?: string[];\r\n  default?: unknown;\r\n  minimum?: number;\r\n  maximum?: number;\r\n}\r\n\r\n/**\r\n * Function parameters schema\r\n */\r\nexport interface FunctionParameters {\r\n  type: 'object';\r\n  properties: Record<string, SchemaProperty>;\r\n  required: string[];\r\n  [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Function schema definition\r\n */\r\nexport interface FunctionSchema {\r\n  name: string;\r\n  description: string;\r\n  parameters: FunctionParameters;\r\n}\r\n\r\n/**\r\n * OpenAI tool definition format\r\n */\r\nexport interface OpenAIToolDefinition {\r\n  type: 'function';\r\n  function: FunctionSchema;\r\n}\r\n\r\n/**\r\n * OpenAI tool call format\r\n */\r\nexport interface OpenAIToolCall {\r\n  id: string;\r\n  type: 'function';\r\n  function: {\r\n    name: string;\r\n    arguments: string;\r\n  };\r\n}\r\n\r\n// ============================================\r\n// AutoGen Types\r\n// ============================================\r\n\r\n/**\r\n * AutoGen function definition\r\n */\r\nexport interface AutoGenFunctionDef {\r\n  name: string;\r\n  description: string;\r\n  parameters: FunctionParameters;\r\n}\r\n\r\n/**\r\n * AutoGen tool configuration\r\n */\r\nexport interface AutoGenToolConfig {\r\n  functions: AutoGenFunctionDef[];\r\n}\r\n\r\n/**\r\n * AutoGen function call\r\n */\r\nexport interface AutoGenFunctionCall {\r\n  name: string;\r\n  arguments: Record<string, unknown> | string;\r\n}\r\n\r\n// ============================================\r\n// LangChain Types\r\n// ============================================\r\n\r\n/**\r\n * LangChain tool input schema\r\n */\r\nexport interface LangChainInputSchema {\r\n  type: 'object';\r\n  properties: Record<string, SchemaProperty>;\r\n  required?: string[];\r\n}\r\n\r\n/**\r\n * LangChain tool metadata\r\n */\r\nexport interface LangChainToolMetadata {\r\n  name: string;\r\n  description: string;\r\n  schema?: LangChainInputSchema;\r\n}\r\n\r\n// ============================================\r\n// Constants\r\n// ============================================\r\n\r\n/**\r\n * Tool name constants\r\n */\r\nexport const TOOL_NAMES = {\r\n  TTS: 'langvoice_text_to_speech',\r\n  MULTI_VOICE: 'langvoice_multi_voice_speech',\r\n  LIST_VOICES: 'langvoice_list_voices',\r\n  LIST_LANGUAGES: 'langvoice_list_languages',\r\n} as const;\r\n\r\nexport type ToolName = (typeof TOOL_NAMES)[keyof typeof TOOL_NAMES];\r\n\r\n/**\r\n * Available voices\r\n */\r\nexport const VOICES = {\r\n  AMERICAN: [\r\n    'heart', 'bella', 'nicole', 'sarah', 'nova', 'sky', 'jessica',\r\n    'river', 'michael', 'fenrir', 'eric', 'liam', 'onyx', 'adam',\r\n  ],\r\n  BRITISH: [\r\n    'emma', 'isabella', 'alice', 'lily', 'george', 'fable', 'lewis', 'daniel',\r\n  ],\r\n} as const;\r\n\r\nexport const ALL_VOICES = [...VOICES.AMERICAN, ...VOICES.BRITISH] as const;\r\n\r\n/**\r\n * Supported languages\r\n */\r\nexport const LANGUAGES = [\r\n  'american_english',\r\n  'british_english',\r\n  'spanish',\r\n  'french',\r\n  'hindi',\r\n  'italian',\r\n  'japanese',\r\n  'brazilian_portuguese',\r\n  'mandarin_chinese',\r\n] as const;\r\n\r\nexport type VoiceId = (typeof ALL_VOICES)[number];\r\nexport type LanguageId = (typeof LANGUAGES)[number];\r\n","/**\r\n * Data models for LangVoice SDK\r\n */\r\n\r\n// ============================================\r\n// Type Definitions\r\n// ============================================\r\n\r\nexport interface VoiceData {\r\n  id: string;\r\n  name: string;\r\n  gender?: string;\r\n  language?: string;\r\n  description?: string;\r\n}\r\n\r\nexport interface LanguageData {\r\n  id: string;\r\n  name: string;\r\n  voices?: string[];\r\n}\r\n\r\nexport interface GenerateRequestData {\r\n  text: string;\r\n  voice: string;\r\n  language: string;\r\n  speed: number;\r\n}\r\n\r\nexport interface MultiVoiceRequestData {\r\n  text: string;\r\n  language: string;\r\n  speed: number;\r\n}\r\n\r\nexport interface GenerateResponseData {\r\n  audioData: Buffer | ArrayBuffer;\r\n  duration?: number;\r\n  generationTime?: number;\r\n  charactersProcessed?: number;\r\n}\r\n\r\n// ============================================\r\n// Classes\r\n// ============================================\r\n\r\n/**\r\n * Voice model\r\n */\r\nexport class Voice implements VoiceData {\r\n  public readonly id: string;\r\n  public readonly name: string;\r\n  public readonly gender?: string;\r\n  public readonly language?: string;\r\n  public readonly description?: string;\r\n\r\n  constructor(data: VoiceData) {\r\n    this.id = data.id;\r\n    this.name = data.name;\r\n    this.gender = data.gender;\r\n    this.language = data.language;\r\n    this.description = data.description;\r\n  }\r\n\r\n  toJSON(): VoiceData {\r\n    return {\r\n      id: this.id,\r\n      name: this.name,\r\n      gender: this.gender,\r\n      language: this.language,\r\n      description: this.description,\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Language model\r\n */\r\nexport class Language implements LanguageData {\r\n  public readonly id: string;\r\n  public readonly name: string;\r\n  public readonly voices?: string[];\r\n\r\n  constructor(data: LanguageData) {\r\n    this.id = data.id;\r\n    this.name = data.name;\r\n    this.voices = data.voices;\r\n  }\r\n\r\n  toJSON(): LanguageData {\r\n    return {\r\n      id: this.id,\r\n      name: this.name,\r\n      voices: this.voices,\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Generate request model\r\n */\r\nexport class GenerateRequest implements GenerateRequestData {\r\n  public readonly text: string;\r\n  public readonly voice: string;\r\n  public readonly language: string;\r\n  public readonly speed: number;\r\n\r\n  constructor(data: Partial<GenerateRequestData> & { text: string }) {\r\n    if (!data.text || data.text.length === 0) {\r\n      throw new Error('Text is required');\r\n    }\r\n    if (data.text.length > 5000) {\r\n      throw new Error('Text must be 5000 characters or less');\r\n    }\r\n\r\n    this.text = data.text;\r\n    this.voice = data.voice || 'heart';\r\n    this.language = data.language || 'american_english';\r\n    this.speed = data.speed ?? 1.0;\r\n\r\n    if (this.speed < 0.5 || this.speed > 2.0) {\r\n      throw new Error('Speed must be between 0.5 and 2.0');\r\n    }\r\n  }\r\n\r\n  toJSON(): GenerateRequestData {\r\n    return {\r\n      text: this.text,\r\n      voice: this.voice,\r\n      language: this.language,\r\n      speed: this.speed,\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Multi-voice request model\r\n */\r\nexport class MultiVoiceRequest implements MultiVoiceRequestData {\r\n  public readonly text: string;\r\n  public readonly language: string;\r\n  public readonly speed: number;\r\n\r\n  constructor(data: Partial<MultiVoiceRequestData> & { text: string }) {\r\n    if (!data.text || data.text.length === 0) {\r\n      throw new Error('Text is required');\r\n    }\r\n    if (data.text.length > 5000) {\r\n      throw new Error('Text must be 5000 characters or less');\r\n    }\r\n\r\n    this.text = data.text;\r\n    this.language = data.language || 'american_english';\r\n    this.speed = data.speed ?? 1.0;\r\n\r\n    if (this.speed < 0.5 || this.speed > 2.0) {\r\n      throw new Error('Speed must be between 0.5 and 2.0');\r\n    }\r\n  }\r\n\r\n  toJSON(): MultiVoiceRequestData {\r\n    return {\r\n      text: this.text,\r\n      language: this.language,\r\n      speed: this.speed,\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Generate response model\r\n */\r\nexport class GenerateResponse implements GenerateResponseData {\r\n  public readonly audioData: Buffer;\r\n  public readonly duration?: number;\r\n  public readonly generationTime?: number;\r\n  public readonly charactersProcessed?: number;\r\n\r\n  constructor(data: GenerateResponseData) {\r\n    this.audioData = Buffer.isBuffer(data.audioData)\r\n      ? data.audioData\r\n      : Buffer.from(data.audioData);\r\n    this.duration = data.duration;\r\n    this.generationTime = data.generationTime;\r\n    this.charactersProcessed = data.charactersProcessed;\r\n  }\r\n\r\n  /**\r\n   * Get audio as base64 string\r\n   */\r\n  toBase64(): string {\r\n    return this.audioData.toString('base64');\r\n  }\r\n\r\n  /**\r\n   * Get audio as Uint8Array (for browser compatibility)\r\n   */\r\n  toUint8Array(): Uint8Array {\r\n    return new Uint8Array(this.audioData);\r\n  }\r\n\r\n  /**\r\n   * Get audio as ArrayBuffer (for browser compatibility)\r\n   */\r\n  toArrayBuffer(): ArrayBuffer {\r\n    const buffer = this.audioData.buffer.slice(\r\n      this.audioData.byteOffset,\r\n      this.audioData.byteOffset + this.audioData.byteLength\r\n    );\r\n    return buffer as ArrayBuffer;\r\n  }\r\n}\r\n\r\n/**\r\n * Voices response model\r\n */\r\nexport class VoicesResponse {\r\n  public readonly voices: Voice[];\r\n\r\n  constructor(data: { voices: VoiceData[] }) {\r\n    this.voices = data.voices.map((v) => new Voice(v));\r\n  }\r\n}\r\n\r\n/**\r\n * Languages response model\r\n */\r\nexport class LanguagesResponse {\r\n  public readonly languages: Language[];\r\n\r\n  constructor(data: { languages: LanguageData[] }) {\r\n    this.languages = data.languages.map((l) => new Language(l));\r\n  }\r\n}\r\n\r\n// ============================================\r\n// Constants\r\n// ============================================\r\n\r\nexport const AMERICAN_VOICES = [\r\n  'heart',\r\n  'bella',\r\n  'nicole',\r\n  'sarah',\r\n  'nova',\r\n  'sky',\r\n  'jessica',\r\n  'river',\r\n  'michael',\r\n  'fenrir',\r\n  'eric',\r\n  'liam',\r\n  'onyx',\r\n  'adam',\r\n] as const;\r\n\r\nexport const BRITISH_VOICES = [\r\n  'emma',\r\n  'isabella',\r\n  'alice',\r\n  'lily',\r\n  'george',\r\n  'fable',\r\n  'lewis',\r\n  'daniel',\r\n] as const;\r\n\r\nexport const ALL_VOICES = [...AMERICAN_VOICES, ...BRITISH_VOICES] as const;\r\n\r\nexport const LANGUAGES = [\r\n  'american_english',\r\n  'british_english',\r\n  'spanish',\r\n  'french',\r\n  'hindi',\r\n  'italian',\r\n  'japanese',\r\n  'brazilian_portuguese',\r\n  'mandarin_chinese',\r\n] as const;\r\n\r\nexport type VoiceId = (typeof ALL_VOICES)[number];\r\nexport type LanguageId = (typeof LANGUAGES)[number];\r\n","/**\r\n * Custom exceptions for LangVoice SDK\r\n */\r\n\r\n/**\r\n * Base exception for LangVoice SDK\r\n */\r\nexport class LangVoiceError extends Error {\r\n  public readonly statusCode?: number;\r\n\r\n  constructor(message: string, statusCode?: number) {\r\n    super(message);\r\n    this.name = 'LangVoiceError';\r\n    this.statusCode = statusCode;\r\n    Object.setPrototypeOf(this, LangVoiceError.prototype);\r\n  }\r\n}\r\n\r\n/**\r\n * Raised when API key is invalid or missing\r\n */\r\nexport class AuthenticationError extends LangVoiceError {\r\n  constructor(message: string = 'Invalid or missing API key') {\r\n    super(message, 401);\r\n    this.name = 'AuthenticationError';\r\n    Object.setPrototypeOf(this, AuthenticationError.prototype);\r\n  }\r\n}\r\n\r\n/**\r\n * Raised when rate limit is exceeded\r\n */\r\nexport class RateLimitError extends LangVoiceError {\r\n  constructor(message: string = 'Rate limit exceeded') {\r\n    super(message, 429);\r\n    this.name = 'RateLimitError';\r\n    Object.setPrototypeOf(this, RateLimitError.prototype);\r\n  }\r\n}\r\n\r\n/**\r\n * Raised when request validation fails\r\n */\r\nexport class ValidationError extends LangVoiceError {\r\n  constructor(message: string) {\r\n    super(message, 400);\r\n    this.name = 'ValidationError';\r\n    Object.setPrototypeOf(this, ValidationError.prototype);\r\n  }\r\n}\r\n\r\n/**\r\n * Raised when API returns an error\r\n */\r\nexport class APIError extends LangVoiceError {\r\n  constructor(message: string, statusCode?: number) {\r\n    super(message, statusCode);\r\n    this.name = 'APIError';\r\n    Object.setPrototypeOf(this, APIError.prototype);\r\n  }\r\n}\r\n\r\n/**\r\n * Check if an error is a LangVoice error\r\n */\r\nexport function isLangVoiceError(error: unknown): error is LangVoiceError {\r\n  return error instanceof LangVoiceError;\r\n}\r\n\r\n/**\r\n * Check if an error is an authentication error\r\n */\r\nexport function isAuthenticationError(error: unknown): error is AuthenticationError {\r\n  return error instanceof AuthenticationError;\r\n}\r\n\r\n/**\r\n * Check if an error is a rate limit error\r\n */\r\nexport function isRateLimitError(error: unknown): error is RateLimitError {\r\n  return error instanceof RateLimitError;\r\n}\r\n","/**\r\n * Main LangVoice API client\r\n */\r\n\r\nimport {\r\n  Voice,\r\n  Language,\r\n  GenerateRequest,\r\n  MultiVoiceRequest,\r\n  GenerateResponse,\r\n  VoicesResponse,\r\n  LanguagesResponse,\r\n  AMERICAN_VOICES,\r\n  BRITISH_VOICES,\r\n  ALL_VOICES,\r\n  LANGUAGES,\r\n} from './models';\r\n\r\nimport {\r\n  AuthenticationError,\r\n  RateLimitError,\r\n  ValidationError,\r\n  APIError,\r\n} from './exceptions';\r\n\r\n// ============================================\r\n// Types\r\n// ============================================\r\n\r\nexport interface LangVoiceClientOptions {\r\n  /** API key for authentication */\r\n  apiKey?: string;\r\n  /** Base URL for the API */\r\n  baseUrl?: string;\r\n  /** Request timeout in milliseconds */\r\n  timeout?: number;\r\n}\r\n\r\nexport interface GenerateOptions {\r\n  /** Text to convert to speech (max 5000 characters) */\r\n  text: string;\r\n  /** Voice ID (e.g., 'heart', 'michael') */\r\n  voice?: string;\r\n  /** Language code (e.g., 'american_english') */\r\n  language?: string;\r\n  /** Speech speed from 0.5 to 2.0 */\r\n  speed?: number;\r\n}\r\n\r\nexport interface MultiVoiceOptions {\r\n  /** Text with [voice] markers */\r\n  text: string;\r\n  /** Language code for all voices */\r\n  language?: string;\r\n  /** Speech speed from 0.5 to 2.0 */\r\n  speed?: number;\r\n}\r\n\r\n// ============================================\r\n// Client\r\n// ============================================\r\n\r\n/**\r\n * LangVoice API client for text-to-speech generation\r\n *\r\n * @example\r\n * ```typescript\r\n * import { LangVoiceClient } from 'langvoice-sdk';\r\n *\r\n * const client = new LangVoiceClient({ apiKey: 'your-api-key' });\r\n *\r\n * const response = await client.generate({\r\n *   text: 'Hello, world!',\r\n *   voice: 'heart',\r\n * });\r\n *\r\n * // Save to file (Node.js)\r\n * import { writeFileSync } from 'fs';\r\n * writeFileSync('output.mp3', response.audioData);\r\n * ```\r\n */\r\nexport class LangVoiceClient {\r\n  private readonly apiKey: string;\r\n  private readonly baseUrl: string;\r\n  private readonly timeout: number;\r\n\r\n  /** Available American voices */\r\n  static readonly AMERICAN_VOICES = AMERICAN_VOICES;\r\n  /** Available British voices */\r\n  static readonly BRITISH_VOICES = BRITISH_VOICES;\r\n  /** All available voices */\r\n  static readonly ALL_VOICES = ALL_VOICES;\r\n  /** Supported languages */\r\n  static readonly LANGUAGES = LANGUAGES;\r\n\r\n  constructor(options: LangVoiceClientOptions = {}) {\r\n    this.apiKey = options.apiKey || this.getEnvApiKey();\r\n\r\n    if (!this.apiKey) {\r\n      throw new AuthenticationError(\r\n        'API key is required. Pass apiKey in options or set LANGVOICE_API_KEY environment variable.'\r\n      );\r\n    }\r\n\r\n    this.baseUrl = options.baseUrl || 'https://www.langvoice.pro/api';\r\n    this.timeout = options.timeout || 60000;\r\n  }\r\n\r\n  /**\r\n   * Get API key from environment variable\r\n   */\r\n  private getEnvApiKey(): string {\r\n    // Node.js environment\r\n    if (typeof process !== 'undefined' && process.env) {\r\n      return process.env.LANGVOICE_API_KEY || '';\r\n    }\r\n    return '';\r\n  }\r\n\r\n  /**\r\n   * Make HTTP request\r\n   */\r\n  private async request<T>(\r\n    method: 'GET' | 'POST',\r\n    endpoint: string,\r\n    body?: Record<string, unknown>\r\n  ): Promise<{ data: T; headers: Headers }> {\r\n    const url = `${this.baseUrl}${endpoint}`;\r\n\r\n    const controller = new AbortController();\r\n    const timeoutId = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n    try {\r\n      const response = await fetch(url, {\r\n        method,\r\n        headers: {\r\n          'X-API-Key': this.apiKey,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: body ? JSON.stringify(body) : undefined,\r\n        signal: controller.signal,\r\n      });\r\n\r\n      clearTimeout(timeoutId);\r\n\r\n      await this.handleResponseErrors(response);\r\n\r\n      return {\r\n        data: (await response.json()) as T,\r\n        headers: response.headers,\r\n      };\r\n    } catch (error) {\r\n      clearTimeout(timeoutId);\r\n\r\n      if (error instanceof Error && error.name === 'AbortError') {\r\n        throw new APIError('Request timeout', 408);\r\n      }\r\n\r\n      throw error;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Make HTTP request for binary data\r\n   */\r\n  private async requestBinary(\r\n    method: 'POST',\r\n    endpoint: string,\r\n    body: object\r\n  ): Promise<{ data: ArrayBuffer; headers: Headers }> {\r\n    const url = `${this.baseUrl}${endpoint}`;\r\n\r\n    const controller = new AbortController();\r\n    const timeoutId = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n    try {\r\n      const response = await fetch(url, {\r\n        method,\r\n        headers: {\r\n          'X-API-Key': this.apiKey,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(body),\r\n        signal: controller.signal,\r\n      });\r\n\r\n      clearTimeout(timeoutId);\r\n\r\n      await this.handleResponseErrors(response);\r\n\r\n      return {\r\n        data: await response.arrayBuffer(),\r\n        headers: response.headers,\r\n      };\r\n    } catch (error) {\r\n      clearTimeout(timeoutId);\r\n\r\n      if (error instanceof Error && error.name === 'AbortError') {\r\n        throw new APIError('Request timeout', 408);\r\n      }\r\n\r\n      throw error;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle API response errors\r\n   */\r\n  private async handleResponseErrors(response: Response): Promise<void> {\r\n    if (response.ok) return;\r\n\r\n    let errorMessage: string;\r\n\r\n    try {\r\n      const errorData = (await response.json()) as { error?: string };\r\n      errorMessage = errorData.error || `API error: ${response.status}`;\r\n    } catch {\r\n      errorMessage = response.statusText || `API error: ${response.status}`;\r\n    }\r\n\r\n    switch (response.status) {\r\n      case 401:\r\n        throw new AuthenticationError(errorMessage);\r\n      case 429:\r\n        throw new RateLimitError(errorMessage);\r\n      case 400:\r\n        throw new ValidationError(errorMessage);\r\n      default:\r\n        throw new APIError(errorMessage, response.status);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Parse float header value\r\n   */\r\n  private parseFloatHeader(value: string | null): number | undefined {\r\n    if (!value) return undefined;\r\n    const parsed = parseFloat(value.replace('s', ''));\r\n    return isNaN(parsed) ? undefined : parsed;\r\n  }\r\n\r\n  /**\r\n   * Parse int header value\r\n   */\r\n  private parseIntHeader(value: string | null): number | undefined {\r\n    if (!value) return undefined;\r\n    const parsed = parseInt(value, 10);\r\n    return isNaN(parsed) ? undefined : parsed;\r\n  }\r\n\r\n  /**\r\n   * Generate speech from text\r\n   *\r\n   * @param options - Generation options\r\n   * @returns GenerateResponse with audio data and metadata\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const response = await client.generate({\r\n   *   text: 'Hello world!',\r\n   *   voice: 'heart',\r\n   *   language: 'american_english',\r\n   *   speed: 1.0,\r\n   * });\r\n   *\r\n   * console.log(`Duration: ${response.duration}s`);\r\n   * ```\r\n   */\r\n  async generate(options: GenerateOptions): Promise<GenerateResponse> {\r\n    const request = new GenerateRequest({\r\n      text: options.text,\r\n      voice: options.voice,\r\n      language: options.language,\r\n      speed: options.speed,\r\n    });\r\n\r\n    const { data, headers } = await this.requestBinary(\r\n      'POST',\r\n      '/tts/generate',\r\n      request.toJSON()\r\n    );\r\n\r\n    return new GenerateResponse({\r\n      audioData: data,\r\n      duration: this.parseFloatHeader(headers.get('X-Audio-Duration')),\r\n      generationTime: this.parseFloatHeader(headers.get('X-Generation-Time')),\r\n      charactersProcessed: this.parseIntHeader(headers.get('X-Characters-Processed')),\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Generate speech with multiple voices\r\n   *\r\n   * @param options - Multi-voice options\r\n   * @returns GenerateResponse with audio data and metadata\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const response = await client.generateMultiVoice({\r\n   *   text: '[heart] Hello! [michael] Hi there!',\r\n   *   language: 'american_english',\r\n   * });\r\n   * ```\r\n   */\r\n  async generateMultiVoice(options: MultiVoiceOptions): Promise<GenerateResponse> {\r\n    const request = new MultiVoiceRequest({\r\n      text: options.text,\r\n      language: options.language,\r\n      speed: options.speed,\r\n    });\r\n\r\n    const { data, headers } = await this.requestBinary(\r\n      'POST',\r\n      '/tts/multi-voice-text',\r\n      request.toJSON()\r\n    );\r\n\r\n    return new GenerateResponse({\r\n      audioData: data,\r\n      duration: this.parseFloatHeader(headers.get('X-Audio-Duration')),\r\n      generationTime: this.parseFloatHeader(headers.get('X-Generation-Time')),\r\n      charactersProcessed: this.parseIntHeader(headers.get('X-Characters-Processed')),\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Get all available voices\r\n   *\r\n   * @returns Array of Voice objects\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const voices = await client.listVoices();\r\n   * voices.forEach(v => console.log(`${v.id}: ${v.name}`));\r\n   * ```\r\n   */\r\n  async listVoices(): Promise<Voice[]> {\r\n    const { data } = await this.request<{ voices: Voice[] }>('GET', '/tts/voices');\r\n    return new VoicesResponse(data).voices;\r\n  }\r\n\r\n  /**\r\n   * Get all supported languages\r\n   *\r\n   * @returns Array of Language objects\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const languages = await client.listLanguages();\r\n   * languages.forEach(l => console.log(`${l.id}: ${l.name}`));\r\n   * ```\r\n   */\r\n  async listLanguages(): Promise<Language[]> {\r\n    const { data } = await this.request<{ languages: Language[] }>('GET', '/tts/languages');\r\n    return new LanguagesResponse(data).languages;\r\n  }\r\n\r\n  /**\r\n   * Simple method to convert text to speech and return audio buffer\r\n   *\r\n   * @param text - Text to convert\r\n   * @param voice - Voice ID\r\n   * @param language - Language code\r\n   * @param speed - Speech speed\r\n   * @returns Audio data as Buffer\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const audioBuffer = await client.textToSpeech('Hello!', 'heart');\r\n   * ```\r\n   */\r\n  async textToSpeech(\r\n    text: string,\r\n    voice: string = 'heart',\r\n    language: string = 'american_english',\r\n    speed: number = 1.0\r\n  ): Promise<Buffer> {\r\n    const response = await this.generate({ text, voice, language, speed });\r\n    return response.audioData;\r\n  }\r\n\r\n  /**\r\n   * Get the API key (useful for passing to tools)\r\n   */\r\n  getApiKey(): string {\r\n    return this.apiKey;\r\n  }\r\n}\r\n","/**\r\n * Generic/Universal tools for LangVoice TTS\r\n *\r\n * Works with any AI agent framework that supports function calling.\r\n */\r\n\r\nimport { LangVoiceClient } from '../client';\r\nimport {\r\n  TOOL_NAMES,\r\n  ALL_VOICES,\r\n  LANGUAGES,\r\n  type FunctionSchema,\r\n} from './types';\r\n\r\n// ============================================\r\n// Types (Specific to generic-tools for backwards compatibility)\r\n// ============================================\r\n\r\nexport interface ToolResult {\r\n  success: boolean;\r\n  error?: string;\r\n}\r\n\r\nexport interface TTSToolResult extends ToolResult {\r\n  audioBase64?: string;\r\n  duration?: number;\r\n  charactersProcessed?: number;\r\n}\r\n\r\nexport interface VoicesToolResult extends ToolResult {\r\n  voices?: Array<{ id: string; name: string }>;\r\n}\r\n\r\nexport interface LanguagesToolResult extends ToolResult {\r\n  languages?: Array<{ id: string; name: string }>;\r\n}\r\n\r\n// ============================================\r\n// LangVoiceToolkit Class\r\n// ============================================\r\n\r\n/**\r\n * Universal toolkit for using LangVoice with any AI framework\r\n *\r\n * @example\r\n * ```typescript\r\n * import { LangVoiceToolkit } from 'langvoice-sdk/tools';\r\n *\r\n * const toolkit = new LangVoiceToolkit({ apiKey: 'your-langvoice-key' });\r\n *\r\n * // Direct usage\r\n * const result = await toolkit.textToSpeech({ text: 'Hello world!' });\r\n * await toolkit.saveAudio(result, 'output.mp3');\r\n *\r\n * // Handle tool calls from any LLM\r\n * const result = await toolkit.handleToolCall('langvoice_text_to_speech', { text: 'Hello' });\r\n *\r\n * // Get schemas for any framework\r\n * const schemas = toolkit.getFunctionSchemas();\r\n * ```\r\n */\r\nexport class LangVoiceToolkit {\r\n  private readonly client: LangVoiceClient;\r\n\r\n  /** Tool name constants */\r\n  static readonly TOOL_TTS = TOOL_NAMES.TTS;\r\n  static readonly TOOL_MULTI_VOICE = TOOL_NAMES.MULTI_VOICE;\r\n  static readonly TOOL_LIST_VOICES = TOOL_NAMES.LIST_VOICES;\r\n  static readonly TOOL_LIST_LANGUAGES = TOOL_NAMES.LIST_LANGUAGES;\r\n\r\n  constructor(options: { apiKey?: string } = {}) {\r\n    this.client = new LangVoiceClient(options);\r\n  }\r\n\r\n  /**\r\n   * Get the underlying LangVoice client\r\n   */\r\n  getClient(): LangVoiceClient {\r\n    return this.client;\r\n  }\r\n\r\n  // =========================================\r\n  // CORE TOOL FUNCTIONS\r\n  // =========================================\r\n\r\n  /**\r\n   * Convert text to speech\r\n   */\r\n  async textToSpeech(params: {\r\n    text: string;\r\n    voice?: string;\r\n    language?: string;\r\n    speed?: number;\r\n  }): Promise<TTSToolResult> {\r\n    try {\r\n      const response = await this.client.generate({\r\n        text: params.text,\r\n        voice: params.voice || 'heart',\r\n        language: params.language || 'american_english',\r\n        speed: params.speed || 1.0,\r\n      });\r\n\r\n      return {\r\n        success: true,\r\n        audioBase64: response.toBase64(),\r\n        duration: response.duration,\r\n        charactersProcessed: response.charactersProcessed,\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate speech with multiple voices\r\n   */\r\n  async multiVoiceSpeech(params: {\r\n    text: string;\r\n    language?: string;\r\n    speed?: number;\r\n  }): Promise<TTSToolResult> {\r\n    try {\r\n      const response = await this.client.generateMultiVoice({\r\n        text: params.text,\r\n        language: params.language || 'american_english',\r\n        speed: params.speed || 1.0,\r\n      });\r\n\r\n      return {\r\n        success: true,\r\n        audioBase64: response.toBase64(),\r\n        duration: response.duration,\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get available voices\r\n   */\r\n  async listVoices(): Promise<VoicesToolResult> {\r\n    try {\r\n      const voices = await this.client.listVoices();\r\n      return {\r\n        success: true,\r\n        voices: voices.map((v) => ({ id: v.id, name: v.name })),\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get supported languages\r\n   */\r\n  async listLanguages(): Promise<LanguagesToolResult> {\r\n    try {\r\n      const languages = await this.client.listLanguages();\r\n      return {\r\n        success: true,\r\n        languages: languages.map((l) => ({ id: l.id, name: l.name })),\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      };\r\n    }\r\n  }\r\n\r\n  // =========================================\r\n  // TOOL CALL HANDLER\r\n  // =========================================\r\n\r\n  /**\r\n   * Handle a tool call by name\r\n   */\r\n  async handleToolCall(\r\n    toolName: string,\r\n    args: Record<string, unknown>\r\n  ): Promise<ToolResult | TTSToolResult | VoicesToolResult | LanguagesToolResult> {\r\n    switch (toolName) {\r\n      case TOOL_NAMES.TTS:\r\n        return this.textToSpeech({\r\n          text: args.text as string,\r\n          voice: args.voice as string | undefined,\r\n          language: args.language as string | undefined,\r\n          speed: args.speed as number | undefined,\r\n        });\r\n\r\n      case TOOL_NAMES.MULTI_VOICE:\r\n        return this.multiVoiceSpeech({\r\n          text: args.text as string,\r\n          language: args.language as string | undefined,\r\n          speed: args.speed as number | undefined,\r\n        });\r\n\r\n      case TOOL_NAMES.LIST_VOICES:\r\n        return this.listVoices();\r\n\r\n      case TOOL_NAMES.LIST_LANGUAGES:\r\n        return this.listLanguages();\r\n\r\n      default:\r\n        return { success: false, error: `Unknown tool: ${toolName}` };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle tool call and return JSON string result\r\n   */\r\n  async handleToolCallJson(\r\n    toolName: string,\r\n    args: Record<string, unknown>\r\n  ): Promise<string> {\r\n    const result = await this.handleToolCall(toolName, args);\r\n    return JSON.stringify(result);\r\n  }\r\n\r\n  // =========================================\r\n  // FUNCTION SCHEMAS\r\n  // =========================================\r\n\r\n  /**\r\n   * Get OpenAI-compatible function schemas\r\n   */\r\n  getFunctionSchemas(): FunctionSchema[] {\r\n    return [\r\n      {\r\n        name: TOOL_NAMES.TTS,\r\n        description: 'Convert text to natural-sounding speech audio using LangVoice TTS API.',\r\n        parameters: {\r\n          type: 'object',\r\n          properties: {\r\n            text: {\r\n              type: 'string',\r\n              description: 'The text to convert to speech. Maximum 5000 characters.',\r\n            },\r\n            voice: {\r\n              type: 'string',\r\n              description: \"Voice ID (e.g., 'heart', 'michael', 'emma').\",\r\n              enum: [...ALL_VOICES],\r\n              default: 'heart',\r\n            },\r\n            language: {\r\n              type: 'string',\r\n              description: 'Language code.',\r\n              enum: [...LANGUAGES],\r\n              default: 'american_english',\r\n            },\r\n            speed: {\r\n              type: 'number',\r\n              description: 'Speech speed from 0.5 (slow) to 2.0 (fast).',\r\n              minimum: 0.5,\r\n              maximum: 2.0,\r\n              default: 1.0,\r\n            },\r\n          },\r\n          required: ['text'],\r\n        },\r\n      },\r\n      {\r\n        name: TOOL_NAMES.MULTI_VOICE,\r\n        description:\r\n          'Generate speech with multiple voices using bracket notation. Use [voice_name] to switch voices.',\r\n        parameters: {\r\n          type: 'object',\r\n          properties: {\r\n            text: {\r\n              type: 'string',\r\n              description: \"Text with voice markers. Example: '[heart] Hello! [michael] Hi there!'\",\r\n            },\r\n            language: {\r\n              type: 'string',\r\n              description: 'Language code for all voices.',\r\n              enum: [...LANGUAGES],\r\n              default: 'american_english',\r\n            },\r\n            speed: {\r\n              type: 'number',\r\n              description: 'Speech speed from 0.5 to 2.0.',\r\n              minimum: 0.5,\r\n              maximum: 2.0,\r\n              default: 1.0,\r\n            },\r\n          },\r\n          required: ['text'],\r\n        },\r\n      },\r\n      {\r\n        name: TOOL_NAMES.LIST_VOICES,\r\n        description: 'Get a list of all available voices for text-to-speech generation.',\r\n        parameters: {\r\n          type: 'object',\r\n          properties: {},\r\n          required: [],\r\n        },\r\n      },\r\n      {\r\n        name: TOOL_NAMES.LIST_LANGUAGES,\r\n        description: 'Get a list of all supported languages for text-to-speech generation.',\r\n        parameters: {\r\n          type: 'object',\r\n          properties: {},\r\n          required: [],\r\n        },\r\n      },\r\n    ];\r\n  }\r\n\r\n  /**\r\n   * Get tools in OpenAI function calling format\r\n   */\r\n  getOpenAITools(): Array<{ type: 'function'; function: FunctionSchema }> {\r\n    return this.getFunctionSchemas().map((schema) => ({\r\n      type: 'function' as const,\r\n      function: schema,\r\n    }));\r\n  }\r\n\r\n  // =========================================\r\n  // UTILITY METHODS\r\n  // =========================================\r\n\r\n  /**\r\n   * Save audio from result to file (Node.js only)\r\n   */\r\n  async saveAudio(result: TTSToolResult, outputPath: string): Promise<boolean> {\r\n    if (!result.success || !result.audioBase64) {\r\n      return false;\r\n    }\r\n\r\n    try {\r\n      const fs = await import('fs');\r\n      const audioBuffer = Buffer.from(result.audioBase64, 'base64');\r\n      fs.writeFileSync(outputPath, audioBuffer);\r\n      return true;\r\n    } catch {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get audio buffer from result\r\n   */\r\n  getAudioBuffer(result: TTSToolResult): Buffer | null {\r\n    if (!result.success || !result.audioBase64) {\r\n      return null;\r\n    }\r\n    return Buffer.from(result.audioBase64, 'base64');\r\n  }\r\n\r\n  /**\r\n   * Get audio as Uint8Array (for browser compatibility)\r\n   */\r\n  getAudioUint8Array(result: TTSToolResult): Uint8Array | null {\r\n    const buffer = this.getAudioBuffer(result);\r\n    return buffer ? new Uint8Array(buffer) : null;\r\n  }\r\n}\r\n\r\n/**\r\n * Create a LangVoice toolkit instance\r\n */\r\nexport function createLangVoiceToolkit(apiKey?: string): LangVoiceToolkit {\r\n  return new LangVoiceToolkit({ apiKey });\r\n}\r\n","/**\r\n * OpenAI function calling tools for LangVoice\r\n */\r\n\r\nimport { LangVoiceClient } from '../client';\r\nimport {\r\n  TOOL_NAMES,\r\n  ALL_VOICES,\r\n  LANGUAGES,\r\n  type OpenAIToolDefinition as BaseOpenAIToolDefinition,\r\n  type OpenAIToolCall as BaseOpenAIToolCall,\r\n} from './types';\r\n\r\n// ============================================\r\n// Types (Re-export for backwards compatibility)\r\n// ============================================\r\n\r\nexport type OpenAIToolDefinition = BaseOpenAIToolDefinition;\r\nexport type OpenAIToolCall = BaseOpenAIToolCall;\r\n\r\nexport interface ToolCallResult {\r\n  success: boolean;\r\n  audioBase64?: string;\r\n  duration?: number;\r\n  charactersProcessed?: number;\r\n  voices?: Array<{ id: string; name: string }>;\r\n  languages?: Array<{ id: string; name: string }>;\r\n  error?: string;\r\n}\r\n\r\n// ============================================\r\n// Tool Definitions\r\n// ============================================\r\n\r\nexport const LANGVOICE_TTS_TOOL: OpenAIToolDefinition = {\r\n  type: 'function',\r\n  function: {\r\n    name: TOOL_NAMES.TTS,\r\n    description:\r\n      'Convert text to natural-sounding speech audio using LangVoice TTS API. Returns base64-encoded MP3 audio.',\r\n    parameters: {\r\n      type: 'object',\r\n      properties: {\r\n        text: {\r\n          type: 'string',\r\n          description: 'The text to convert to speech. Maximum 5000 characters.',\r\n        },\r\n        voice: {\r\n          type: 'string',\r\n          description: 'Voice ID to use for speech generation.',\r\n          enum: [...ALL_VOICES],\r\n          default: 'heart',\r\n        },\r\n        language: {\r\n          type: 'string',\r\n          description: 'Language code for the speech.',\r\n          enum: [...LANGUAGES],\r\n          default: 'american_english',\r\n        },\r\n        speed: {\r\n          type: 'number',\r\n          description: 'Speech speed from 0.5 (slow) to 2.0 (fast). Default is 1.0.',\r\n          minimum: 0.5,\r\n          maximum: 2.0,\r\n          default: 1.0,\r\n        },\r\n      },\r\n      required: ['text'],\r\n    },\r\n  },\r\n};\r\n\r\nexport const LANGVOICE_MULTI_VOICE_TOOL: OpenAIToolDefinition = {\r\n  type: 'function',\r\n  function: {\r\n    name: TOOL_NAMES.MULTI_VOICE,\r\n    description:\r\n      'Generate speech with multiple voices using bracket notation. Use [voice_name] to switch voices in the text.',\r\n    parameters: {\r\n      type: 'object',\r\n      properties: {\r\n        text: {\r\n          type: 'string',\r\n          description: \"Text with voice markers. Example: '[heart] Hello! [michael] Hi there!'\",\r\n        },\r\n        language: {\r\n          type: 'string',\r\n          description: 'Language code for all voices.',\r\n          enum: [...LANGUAGES],\r\n          default: 'american_english',\r\n        },\r\n        speed: {\r\n          type: 'number',\r\n          description: 'Speech speed from 0.5 to 2.0.',\r\n          minimum: 0.5,\r\n          maximum: 2.0,\r\n          default: 1.0,\r\n        },\r\n      },\r\n      required: ['text'],\r\n    },\r\n  },\r\n};\r\n\r\nexport const LANGVOICE_LIST_VOICES_TOOL: OpenAIToolDefinition = {\r\n  type: 'function',\r\n  function: {\r\n    name: TOOL_NAMES.LIST_VOICES,\r\n    description: 'Get a list of all available voices for text-to-speech generation.',\r\n    parameters: {\r\n      type: 'object',\r\n      properties: {},\r\n      required: [],\r\n    },\r\n  },\r\n};\r\n\r\nexport const LANGVOICE_LIST_LANGUAGES_TOOL: OpenAIToolDefinition = {\r\n  type: 'function',\r\n  function: {\r\n    name: TOOL_NAMES.LIST_LANGUAGES,\r\n    description: 'Get a list of all supported languages for text-to-speech generation.',\r\n    parameters: {\r\n      type: 'object',\r\n      properties: {},\r\n      required: [],\r\n    },\r\n  },\r\n};\r\n\r\n// ============================================\r\n// Functions\r\n// ============================================\r\n\r\n/**\r\n * Get all LangVoice tools formatted for OpenAI function calling\r\n */\r\nexport function getOpenAITools(): OpenAIToolDefinition[] {\r\n  return [\r\n    LANGVOICE_TTS_TOOL,\r\n    LANGVOICE_MULTI_VOICE_TOOL,\r\n    LANGVOICE_LIST_VOICES_TOOL,\r\n    LANGVOICE_LIST_LANGUAGES_TOOL,\r\n  ];\r\n}\r\n\r\n/**\r\n * Handle an OpenAI tool call for LangVoice functions\r\n */\r\nexport async function handleOpenAIToolCall(\r\n  toolName: string,\r\n  args: Record<string, unknown>,\r\n  apiKey?: string\r\n): Promise<string> {\r\n  const client = new LangVoiceClient({ apiKey });\r\n\r\n  try {\r\n    let result: ToolCallResult;\r\n\r\n    switch (toolName) {\r\n      case TOOL_NAMES.TTS: {\r\n        const response = await client.generate({\r\n          text: args.text as string,\r\n          voice: (args.voice as string) || 'heart',\r\n          language: (args.language as string) || 'american_english',\r\n          speed: (args.speed as number) || 1.0,\r\n        });\r\n        result = {\r\n          success: true,\r\n          audioBase64: response.toBase64(),\r\n          duration: response.duration,\r\n          charactersProcessed: response.charactersProcessed,\r\n        };\r\n        break;\r\n      }\r\n\r\n      case TOOL_NAMES.MULTI_VOICE: {\r\n        const response = await client.generateMultiVoice({\r\n          text: args.text as string,\r\n          language: (args.language as string) || 'american_english',\r\n          speed: (args.speed as number) || 1.0,\r\n        });\r\n        result = {\r\n          success: true,\r\n          audioBase64: response.toBase64(),\r\n          duration: response.duration,\r\n        };\r\n        break;\r\n      }\r\n\r\n      case TOOL_NAMES.LIST_VOICES: {\r\n        const voices = await client.listVoices();\r\n        result = {\r\n          success: true,\r\n          voices: voices.map((v) => ({ id: v.id, name: v.name })),\r\n        };\r\n        break;\r\n      }\r\n\r\n      case TOOL_NAMES.LIST_LANGUAGES: {\r\n        const languages = await client.listLanguages();\r\n        result = {\r\n          success: true,\r\n          languages: languages.map((l) => ({ id: l.id, name: l.name })),\r\n        };\r\n        break;\r\n      }\r\n\r\n      default:\r\n        result = { success: false, error: `Unknown tool: ${toolName}` };\r\n    }\r\n\r\n    return JSON.stringify(result);\r\n  } catch (error) {\r\n    return JSON.stringify({\r\n      success: false,\r\n      error: error instanceof Error ? error.message : 'Unknown error',\r\n    });\r\n  }\r\n}\r\n\r\n// ============================================\r\n// LangVoiceOpenAITools Class\r\n// ============================================\r\n\r\n/**\r\n * Helper class for integrating LangVoice with OpenAI function calling\r\n *\r\n * @example\r\n * ```typescript\r\n * import OpenAI from 'openai';\r\n * import { LangVoiceOpenAITools } from 'langvoice-sdk/tools';\r\n *\r\n * const openai = new OpenAI();\r\n * const langvoice = new LangVoiceOpenAITools({ apiKey: 'your-langvoice-key' });\r\n *\r\n * const response = await openai.chat.completions.create({\r\n *   model: 'gpt-4',\r\n *   messages: [{ role: 'user', content: 'Generate speech saying hello' }],\r\n *   tools: langvoice.getTools(),\r\n * });\r\n *\r\n * if (response.choices[0].message.tool_calls) {\r\n *   for (const toolCall of response.choices[0].message.tool_calls) {\r\n *     const result = await langvoice.handleCall(toolCall);\r\n *     console.log(result);\r\n *   }\r\n * }\r\n * ```\r\n */\r\nexport class LangVoiceOpenAITools {\r\n  private readonly client: LangVoiceClient;\r\n\r\n  constructor(options: { apiKey?: string } = {}) {\r\n    this.client = new LangVoiceClient(options);\r\n  }\r\n\r\n  /**\r\n   * Get tool definitions for OpenAI\r\n   */\r\n  getTools(): OpenAIToolDefinition[] {\r\n    return getOpenAITools();\r\n  }\r\n\r\n  /**\r\n   * Handle an OpenAI tool call object\r\n   */\r\n  async handleCall(toolCall: OpenAIToolCall): Promise<ToolCallResult> {\r\n    const args = JSON.parse(toolCall.function.arguments);\r\n    const resultJson = await handleOpenAIToolCall(\r\n      toolCall.function.name,\r\n      args,\r\n      this.client.getApiKey()\r\n    );\r\n    return JSON.parse(resultJson);\r\n  }\r\n\r\n  /**\r\n   * Save audio from a tool call result to a file (Node.js only)\r\n   */\r\n  async saveAudioFromResult(\r\n    result: ToolCallResult,\r\n    outputPath: string\r\n  ): Promise<boolean> {\r\n    if (!result.success || !result.audioBase64) {\r\n      return false;\r\n    }\r\n\r\n    try {\r\n      // Dynamic import for Node.js fs module\r\n      const fs = await import('fs');\r\n      const audioBuffer = Buffer.from(result.audioBase64, 'base64');\r\n      fs.writeFileSync(outputPath, audioBuffer);\r\n      return true;\r\n    } catch {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get audio buffer from result\r\n   */\r\n  getAudioBuffer(result: ToolCallResult): Buffer | null {\r\n    if (!result.success || !result.audioBase64) {\r\n      return null;\r\n    }\r\n    return Buffer.from(result.audioBase64, 'base64');\r\n  }\r\n}\r\n","/**\r\n * LangChain tools for LangVoice TTS\r\n */\r\n\r\nimport { LangVoiceClient } from '../client';\r\nimport { TOOL_NAMES } from './types';\r\n\r\n// ============================================\r\n// Types\r\n// ============================================\r\n\r\ninterface ToolInput {\r\n  text: string;\r\n  voice?: string;\r\n  language?: string;\r\n  speed?: number;\r\n}\r\n\r\ninterface MultiVoiceInput {\r\n  text: string;\r\n  language?: string;\r\n  speed?: number;\r\n}\r\n\r\n// ============================================\r\n// Base Tool Class (Compatible with LangChain)\r\n// ============================================\r\n\r\n/**\r\n * Base class for LangVoice tools\r\n * Can be used standalone or with LangChain\r\n */\r\nabstract class BaseLangVoiceTool {\r\n  abstract name: string;\r\n  abstract description: string;\r\n  protected client: LangVoiceClient;\r\n  protected outputFile?: string;\r\n\r\n  constructor(options: { apiKey?: string; outputFile?: string } = {}) {\r\n    this.client = new LangVoiceClient({ apiKey: options.apiKey });\r\n    this.outputFile = options.outputFile;\r\n  }\r\n\r\n  abstract call(input: unknown): Promise<string>;\r\n\r\n  /**\r\n   * Make this tool compatible with LangChain\r\n   */\r\n  async invoke(input: unknown): Promise<string> {\r\n    return this.call(input);\r\n  }\r\n}\r\n\r\n// ============================================\r\n// Tool Implementations\r\n// ============================================\r\n\r\n/**\r\n * LangChain-compatible tool for text-to-speech generation\r\n */\r\nexport class LangVoiceTTSTool extends BaseLangVoiceTool {\r\n  name = TOOL_NAMES.TTS;\r\n  description =\r\n    'Convert text to natural-sounding speech audio using LangVoice TTS. ' +\r\n    'Saves audio to output.mp3 and returns confirmation with duration.';\r\n\r\n  constructor(options: { apiKey?: string; outputFile?: string } = {}) {\r\n    super(options);\r\n    this.outputFile = options.outputFile || 'output.mp3';\r\n  }\r\n\r\n  async call(input: ToolInput | string): Promise<string> {\r\n    try {\r\n      const params: ToolInput = typeof input === 'string' ? { text: input } : input;\r\n\r\n      const response = await this.client.generate({\r\n        text: params.text,\r\n        voice: params.voice || 'heart',\r\n        language: params.language || 'american_english',\r\n        speed: params.speed || 1.0,\r\n      });\r\n\r\n      if (this.outputFile) {\r\n        try {\r\n          const fs = await import('fs');\r\n          fs.writeFileSync(this.outputFile, response.audioData);\r\n          return (\r\n            `✅ Speech generated and saved to ${this.outputFile}! ` +\r\n            `Duration: ${response.duration}s, ` +\r\n            `Characters: ${response.charactersProcessed}`\r\n          );\r\n        } catch {\r\n          return (\r\n            `✅ Speech generated! Duration: ${response.duration}s. ` +\r\n            `Audio (base64): ${response.toBase64().substring(0, 100)}...`\r\n          );\r\n        }\r\n      }\r\n\r\n      return (\r\n        `✅ Speech generated! Duration: ${response.duration}s. ` +\r\n        `Audio (base64): ${response.toBase64().substring(0, 100)}...`\r\n      );\r\n    } catch (error) {\r\n      return `❌ Error generating speech: ${error instanceof Error ? error.message : 'Unknown error'}`;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * LangChain-compatible tool for multi-voice speech generation\r\n */\r\nexport class LangVoiceMultiVoiceTool extends BaseLangVoiceTool {\r\n  name = TOOL_NAMES.MULTI_VOICE;\r\n  description =\r\n    'Generate speech with multiple voices using bracket notation. ' +\r\n    \"Use [voice_name] to switch voices. Example: '[heart] Hello! [michael] Hi there!'\";\r\n\r\n  async call(input: MultiVoiceInput | string): Promise<string> {\r\n    try {\r\n      const params: MultiVoiceInput = typeof input === 'string' ? { text: input } : input;\r\n\r\n      const response = await this.client.generateMultiVoice({\r\n        text: params.text,\r\n        language: params.language || 'american_english',\r\n        speed: params.speed || 1.0,\r\n      });\r\n\r\n      if (this.outputFile) {\r\n        try {\r\n          const fs = await import('fs');\r\n          fs.writeFileSync(this.outputFile, response.audioData);\r\n          return (\r\n            `✅ Multi-voice speech generated and saved to ${this.outputFile}! ` +\r\n            `Duration: ${response.duration}s`\r\n          );\r\n        } catch {\r\n          return (\r\n            `✅ Multi-voice speech generated! Duration: ${response.duration}s. ` +\r\n            `Audio available in base64 format.`\r\n          );\r\n        }\r\n      }\r\n\r\n      return (\r\n        `✅ Multi-voice speech generated! Duration: ${response.duration}s. ` +\r\n        `Audio available in base64 format.`\r\n      );\r\n    } catch (error) {\r\n      return `❌ Error generating multi-voice speech: ${error instanceof Error ? error.message : 'Unknown error'}`;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * LangChain-compatible tool for listing voices\r\n */\r\nexport class LangVoiceVoicesTool extends BaseLangVoiceTool {\r\n  name = TOOL_NAMES.LIST_VOICES;\r\n  description = 'Get a list of all available voices for text-to-speech generation.';\r\n\r\n  async call(): Promise<string> {\r\n    try {\r\n      const voices = await this.client.listVoices();\r\n      const voiceList = voices.map((v) => `${v.id} (${v.name})`).join(', ');\r\n      return `Available voices: ${voiceList}`;\r\n    } catch (error) {\r\n      return `Error listing voices: ${error instanceof Error ? error.message : 'Unknown error'}`;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * LangChain-compatible tool for listing languages\r\n */\r\nexport class LangVoiceLanguagesTool extends BaseLangVoiceTool {\r\n  name = TOOL_NAMES.LIST_LANGUAGES;\r\n  description = 'Get a list of all supported languages for text-to-speech generation.';\r\n\r\n  async call(): Promise<string> {\r\n    try {\r\n      const languages = await this.client.listLanguages();\r\n      const langList = languages.map((l) => `${l.id} (${l.name})`).join(', ');\r\n      return `Supported languages: ${langList}`;\r\n    } catch (error) {\r\n      return `Error listing languages: ${error instanceof Error ? error.message : 'Unknown error'}`;\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================\r\n// Toolkit Class\r\n// ============================================\r\n\r\n/**\r\n * Convenience class for using LangVoice with LangChain\r\n *\r\n * @example\r\n * ```typescript\r\n * import { LangVoiceLangChainToolkit } from 'langvoice-sdk/tools';\r\n *\r\n * const toolkit = new LangVoiceLangChainToolkit({ apiKey: 'your-langvoice-key' });\r\n * const tools = toolkit.getTools();\r\n *\r\n * // Use with LangChain agent\r\n * ```\r\n */\r\nexport class LangVoiceLangChainToolkit {\r\n  private readonly apiKey?: string;\r\n\r\n  constructor(options: { apiKey?: string } = {}) {\r\n    this.apiKey = options.apiKey;\r\n  }\r\n\r\n  /**\r\n   * Get all LangVoice tools\r\n   */\r\n  getTools(): BaseLangVoiceTool[] {\r\n    return [\r\n      new LangVoiceTTSTool({ apiKey: this.apiKey }),\r\n      new LangVoiceMultiVoiceTool({ apiKey: this.apiKey }),\r\n      new LangVoiceVoicesTool({ apiKey: this.apiKey }),\r\n      new LangVoiceLanguagesTool({ apiKey: this.apiKey }),\r\n    ];\r\n  }\r\n\r\n  /**\r\n   * Get the text-to-speech tool\r\n   */\r\n  getTTSTool(outputFile?: string): LangVoiceTTSTool {\r\n    return new LangVoiceTTSTool({ apiKey: this.apiKey, outputFile });\r\n  }\r\n\r\n  /**\r\n   * Get the multi-voice tool\r\n   */\r\n  getMultiVoiceTool(outputFile?: string): LangVoiceMultiVoiceTool {\r\n    return new LangVoiceMultiVoiceTool({ apiKey: this.apiKey, outputFile });\r\n  }\r\n\r\n  /**\r\n   * Get the list voices tool\r\n   */\r\n  getVoicesTool(): LangVoiceVoicesTool {\r\n    return new LangVoiceVoicesTool({ apiKey: this.apiKey });\r\n  }\r\n\r\n  /**\r\n   * Get the list languages tool\r\n   */\r\n  getLanguagesTool(): LangVoiceLanguagesTool {\r\n    return new LangVoiceLanguagesTool({ apiKey: this.apiKey });\r\n  }\r\n}\r\n\r\n/**\r\n * Get all LangChain tools\r\n */\r\nexport function getAllLangChainTools(apiKey?: string): BaseLangVoiceTool[] {\r\n  return new LangVoiceLangChainToolkit({ apiKey }).getTools();\r\n}\r\n","/**\r\n * AutoGen tools for LangVoice TTS\r\n *\r\n * Provides integration with Microsoft AutoGen framework for multi-agent systems.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { LangVoiceAutoGenTools } from 'langvoice-sdk/tools';\r\n *\r\n * const tools = new LangVoiceAutoGenTools({ apiKey: 'your-api-key' });\r\n *\r\n * // Get function definitions for AutoGen agent\r\n * const functionDefs = tools.getFunctionDefinitions();\r\n *\r\n * // Register with AutoGen agent\r\n * const functionMap = tools.getFunctionMap();\r\n * ```\r\n */\r\n\r\nimport { LangVoiceClient } from '../client';\r\nimport {\r\n  type TTSResult,\r\n  type TTSInput,\r\n  type MultiVoiceInput,\r\n  type AutoGenFunctionDef,\r\n  type AutoGenFunctionCall,\r\n  TOOL_NAMES,\r\n  ALL_VOICES,\r\n  LANGUAGES,\r\n} from './types';\r\n\r\n// ============================================\r\n// Types\r\n// ============================================\r\n\r\nexport interface AutoGenToolOptions {\r\n  /** LangVoice API key */\r\n  apiKey?: string;\r\n  /** Default output file path for audio */\r\n  outputFile?: string;\r\n  /** Whether to automatically save audio files */\r\n  autoSave?: boolean;\r\n}\r\n\r\nexport type FunctionHandler = (args: Record<string, unknown>) => Promise<string>;\r\n\r\nexport interface FunctionMap {\r\n  [key: string]: FunctionHandler;\r\n}\r\n\r\n// ============================================\r\n// Function Definitions\r\n// ============================================\r\n\r\nconst TTS_FUNCTION_DEF: AutoGenFunctionDef = {\r\n  name: TOOL_NAMES.TTS,\r\n  description:\r\n    'Convert text to natural-sounding speech audio using LangVoice TTS API. ' +\r\n    'Returns information about the generated audio including duration and a success status. ' +\r\n    'The audio is saved to a file if outputFile is configured.',\r\n  parameters: {\r\n    type: 'object',\r\n    properties: {\r\n      text: {\r\n        type: 'string',\r\n        description: 'The text to convert to speech. Maximum 5000 characters.',\r\n      },\r\n      voice: {\r\n        type: 'string',\r\n        description: 'Voice ID to use. Available voices include: heart, bella, michael, emma, etc.',\r\n        enum: [...ALL_VOICES],\r\n        default: 'heart',\r\n      },\r\n      language: {\r\n        type: 'string',\r\n        description: 'Language code for the speech.',\r\n        enum: [...LANGUAGES],\r\n        default: 'american_english',\r\n      },\r\n      speed: {\r\n        type: 'number',\r\n        description: 'Speech speed from 0.5 (slow) to 2.0 (fast). Default is 1.0.',\r\n        minimum: 0.5,\r\n        maximum: 2.0,\r\n        default: 1.0,\r\n      },\r\n      output_file: {\r\n        type: 'string',\r\n        description: 'Optional file path to save the audio. Defaults to output.mp3.',\r\n      },\r\n    },\r\n    required: ['text'],\r\n  },\r\n};\r\n\r\nconst MULTI_VOICE_FUNCTION_DEF: AutoGenFunctionDef = {\r\n  name: TOOL_NAMES.MULTI_VOICE,\r\n  description:\r\n    'Generate speech with multiple voices in a single audio file. ' +\r\n    \"Use bracket notation to switch voices: '[heart] Hello! [michael] Hi there!' \" +\r\n    'All voices will use the same language and speed settings.',\r\n  parameters: {\r\n    type: 'object',\r\n    properties: {\r\n      text: {\r\n        type: 'string',\r\n        description:\r\n          \"Text with voice markers. Use [voice_name] to switch voices. \" +\r\n          \"Example: '[heart] Welcome to the show! [michael] Thanks for having me!'\",\r\n      },\r\n      language: {\r\n        type: 'string',\r\n        description: 'Language code for all voices in the audio.',\r\n        enum: [...LANGUAGES],\r\n        default: 'american_english',\r\n      },\r\n      speed: {\r\n        type: 'number',\r\n        description: 'Speech speed from 0.5 to 2.0.',\r\n        minimum: 0.5,\r\n        maximum: 2.0,\r\n        default: 1.0,\r\n      },\r\n      output_file: {\r\n        type: 'string',\r\n        description: 'Optional file path to save the audio.',\r\n      },\r\n    },\r\n    required: ['text'],\r\n  },\r\n};\r\n\r\nconst LIST_VOICES_FUNCTION_DEF: AutoGenFunctionDef = {\r\n  name: TOOL_NAMES.LIST_VOICES,\r\n  description:\r\n    'Get a list of all available voices for text-to-speech generation. ' +\r\n    'Returns voice IDs and names that can be used with the TTS functions.',\r\n  parameters: {\r\n    type: 'object',\r\n    properties: {},\r\n    required: [],\r\n  },\r\n};\r\n\r\nconst LIST_LANGUAGES_FUNCTION_DEF: AutoGenFunctionDef = {\r\n  name: TOOL_NAMES.LIST_LANGUAGES,\r\n  description:\r\n    'Get a list of all supported languages for text-to-speech generation. ' +\r\n    'Returns language codes and names.',\r\n  parameters: {\r\n    type: 'object',\r\n    properties: {},\r\n    required: [],\r\n  },\r\n};\r\n\r\n// ============================================\r\n// LangVoiceAutoGenTools Class\r\n// ============================================\r\n\r\n/**\r\n * AutoGen integration for LangVoice TTS\r\n *\r\n * Provides function definitions and handlers compatible with Microsoft AutoGen\r\n * multi-agent framework.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { LangVoiceAutoGenTools } from 'langvoice-sdk/tools';\r\n *\r\n * const langvoiceTools = new LangVoiceAutoGenTools({\r\n *   apiKey: 'your-api-key',\r\n *   autoSave: true,\r\n *   outputFile: 'speech.mp3',\r\n * });\r\n *\r\n * // Get function definitions for the agent config\r\n * const functions = langvoiceTools.getFunctionDefinitions();\r\n *\r\n * // Get the function map for registration\r\n * const functionMap = langvoiceTools.getFunctionMap();\r\n *\r\n * // Or handle calls manually\r\n * const result = await langvoiceTools.handleFunctionCall({\r\n *   name: 'langvoice_text_to_speech',\r\n *   arguments: { text: 'Hello world!' },\r\n * });\r\n * ```\r\n */\r\nexport class LangVoiceAutoGenTools {\r\n  private readonly client: LangVoiceClient;\r\n  private readonly outputFile: string;\r\n  private readonly autoSave: boolean;\r\n\r\n  constructor(options: AutoGenToolOptions = {}) {\r\n    this.client = new LangVoiceClient({ apiKey: options.apiKey });\r\n    this.outputFile = options.outputFile || 'output.mp3';\r\n    this.autoSave = options.autoSave ?? true;\r\n  }\r\n\r\n  /**\r\n   * Get the underlying LangVoice client\r\n   */\r\n  getClient(): LangVoiceClient {\r\n    return this.client;\r\n  }\r\n\r\n  // =========================================\r\n  // FUNCTION DEFINITIONS\r\n  // =========================================\r\n\r\n  /**\r\n   * Get all function definitions for AutoGen agent configuration\r\n   */\r\n  getFunctionDefinitions(): AutoGenFunctionDef[] {\r\n    return [\r\n      TTS_FUNCTION_DEF,\r\n      MULTI_VOICE_FUNCTION_DEF,\r\n      LIST_VOICES_FUNCTION_DEF,\r\n      LIST_LANGUAGES_FUNCTION_DEF,\r\n    ];\r\n  }\r\n\r\n  /**\r\n   * Get function definition by name\r\n   */\r\n  getFunctionDefinition(name: string): AutoGenFunctionDef | undefined {\r\n    return this.getFunctionDefinitions().find((f) => f.name === name);\r\n  }\r\n\r\n  /**\r\n   * Get the TTS function definition only\r\n   */\r\n  getTTSFunctionDef(): AutoGenFunctionDef {\r\n    return TTS_FUNCTION_DEF;\r\n  }\r\n\r\n  /**\r\n   * Get the multi-voice function definition only\r\n   */\r\n  getMultiVoiceFunctionDef(): AutoGenFunctionDef {\r\n    return MULTI_VOICE_FUNCTION_DEF;\r\n  }\r\n\r\n  // =========================================\r\n  // FUNCTION MAP (for AutoGen registration)\r\n  // =========================================\r\n\r\n  /**\r\n   * Get a map of function names to handlers\r\n   *\r\n   * Use this to register functions with AutoGen agents:\r\n   * ```typescript\r\n   * const functionMap = tools.getFunctionMap();\r\n   * // Register with AutoGen agent\r\n   * ```\r\n   */\r\n  getFunctionMap(): FunctionMap {\r\n    return {\r\n      [TOOL_NAMES.TTS]: (args) => this.textToSpeechHandler(args),\r\n      [TOOL_NAMES.MULTI_VOICE]: (args) => this.multiVoiceHandler(args),\r\n      [TOOL_NAMES.LIST_VOICES]: () => this.listVoicesHandler(),\r\n      [TOOL_NAMES.LIST_LANGUAGES]: () => this.listLanguagesHandler(),\r\n    };\r\n  }\r\n\r\n  // =========================================\r\n  // FUNCTION HANDLERS\r\n  // =========================================\r\n\r\n  /**\r\n   * Handle text-to-speech function call\r\n   */\r\n  private async textToSpeechHandler(args: Record<string, unknown>): Promise<string> {\r\n    try {\r\n      const response = await this.client.generate({\r\n        text: args.text as string,\r\n        voice: (args.voice as string) || 'heart',\r\n        language: (args.language as string) || 'american_english',\r\n        speed: (args.speed as number) || 1.0,\r\n      });\r\n\r\n      const outputPath = (args.output_file as string) || this.outputFile;\r\n\r\n      if (this.autoSave) {\r\n        try {\r\n          const fs = await import('fs');\r\n          fs.writeFileSync(outputPath, response.audioData);\r\n          return JSON.stringify({\r\n            success: true,\r\n            message: `Speech generated and saved to ${outputPath}`,\r\n            duration: response.duration,\r\n            charactersProcessed: response.charactersProcessed,\r\n            outputFile: outputPath,\r\n          });\r\n        } catch (fsError) {\r\n          return JSON.stringify({\r\n            success: true,\r\n            message: 'Speech generated (file save not available in this environment)',\r\n            duration: response.duration,\r\n            charactersProcessed: response.charactersProcessed,\r\n            audioBase64Preview: response.toBase64().substring(0, 100) + '...',\r\n          });\r\n        }\r\n      }\r\n\r\n      return JSON.stringify({\r\n        success: true,\r\n        duration: response.duration,\r\n        charactersProcessed: response.charactersProcessed,\r\n        audioBase64: response.toBase64(),\r\n      });\r\n    } catch (error) {\r\n      return JSON.stringify({\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle multi-voice function call\r\n   */\r\n  private async multiVoiceHandler(args: Record<string, unknown>): Promise<string> {\r\n    try {\r\n      const response = await this.client.generateMultiVoice({\r\n        text: args.text as string,\r\n        language: (args.language as string) || 'american_english',\r\n        speed: (args.speed as number) || 1.0,\r\n      });\r\n\r\n      const outputPath = (args.output_file as string) || this.outputFile;\r\n\r\n      if (this.autoSave) {\r\n        try {\r\n          const fs = await import('fs');\r\n          fs.writeFileSync(outputPath, response.audioData);\r\n          return JSON.stringify({\r\n            success: true,\r\n            message: `Multi-voice speech generated and saved to ${outputPath}`,\r\n            duration: response.duration,\r\n            outputFile: outputPath,\r\n          });\r\n        } catch {\r\n          return JSON.stringify({\r\n            success: true,\r\n            message: 'Multi-voice speech generated',\r\n            duration: response.duration,\r\n          });\r\n        }\r\n      }\r\n\r\n      return JSON.stringify({\r\n        success: true,\r\n        duration: response.duration,\r\n        audioBase64: response.toBase64(),\r\n      });\r\n    } catch (error) {\r\n      return JSON.stringify({\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle list voices function call\r\n   */\r\n  private async listVoicesHandler(): Promise<string> {\r\n    try {\r\n      const voices = await this.client.listVoices();\r\n      return JSON.stringify({\r\n        success: true,\r\n        voices: voices.map((v) => ({ id: v.id, name: v.name })),\r\n        count: voices.length,\r\n      });\r\n    } catch (error) {\r\n      return JSON.stringify({\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle list languages function call\r\n   */\r\n  private async listLanguagesHandler(): Promise<string> {\r\n    try {\r\n      const languages = await this.client.listLanguages();\r\n      return JSON.stringify({\r\n        success: true,\r\n        languages: languages.map((l) => ({ id: l.id, name: l.name })),\r\n        count: languages.length,\r\n      });\r\n    } catch (error) {\r\n      return JSON.stringify({\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      });\r\n    }\r\n  }\r\n\r\n  // =========================================\r\n  // GENERIC FUNCTION CALL HANDLER\r\n  // =========================================\r\n\r\n  /**\r\n   * Handle a function call from AutoGen\r\n   *\r\n   * @param call - The function call object\r\n   * @returns JSON string result\r\n   */\r\n  async handleFunctionCall(call: AutoGenFunctionCall): Promise<string> {\r\n    const args =\r\n      typeof call.arguments === 'string'\r\n        ? JSON.parse(call.arguments)\r\n        : call.arguments;\r\n\r\n    const functionMap = this.getFunctionMap();\r\n    const handler = functionMap[call.name];\r\n\r\n    if (!handler) {\r\n      return JSON.stringify({\r\n        success: false,\r\n        error: `Unknown function: ${call.name}`,\r\n      });\r\n    }\r\n\r\n    return handler(args);\r\n  }\r\n\r\n  // =========================================\r\n  // DIRECT METHODS\r\n  // =========================================\r\n\r\n  /**\r\n   * Generate speech directly (not as a tool call)\r\n   */\r\n  async generateSpeech(input: TTSInput): Promise<TTSResult> {\r\n    try {\r\n      const response = await this.client.generate({\r\n        text: input.text,\r\n        voice: input.voice || 'heart',\r\n        language: input.language || 'american_english',\r\n        speed: input.speed || 1.0,\r\n      });\r\n\r\n      return {\r\n        success: true,\r\n        audioBase64: response.toBase64(),\r\n        audioBuffer: response.audioData,\r\n        duration: response.duration,\r\n        charactersProcessed: response.charactersProcessed,\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate multi-voice speech directly\r\n   */\r\n  async generateMultiVoice(input: MultiVoiceInput): Promise<TTSResult> {\r\n    try {\r\n      const response = await this.client.generateMultiVoice({\r\n        text: input.text,\r\n        language: input.language || 'american_english',\r\n        speed: input.speed || 1.0,\r\n      });\r\n\r\n      return {\r\n        success: true,\r\n        audioBase64: response.toBase64(),\r\n        audioBuffer: response.audioData,\r\n        duration: response.duration,\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown error',\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Save audio result to file\r\n   */\r\n  async saveAudio(result: TTSResult, outputPath?: string): Promise<boolean> {\r\n    if (!result.success || !result.audioBase64) {\r\n      return false;\r\n    }\r\n\r\n    try {\r\n      const fs = await import('fs');\r\n      const audioBuffer = Buffer.from(result.audioBase64, 'base64');\r\n      fs.writeFileSync(outputPath || this.outputFile, audioBuffer);\r\n      return true;\r\n    } catch {\r\n      return false;\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================\r\n// Factory Functions\r\n// ============================================\r\n\r\n/**\r\n * Create LangVoice AutoGen tools instance\r\n */\r\nexport function createAutoGenTools(options?: AutoGenToolOptions): LangVoiceAutoGenTools {\r\n  return new LangVoiceAutoGenTools(options);\r\n}\r\n\r\n/**\r\n * Get function definitions for AutoGen (without creating full tools instance)\r\n */\r\nexport function getAutoGenFunctionDefinitions(): AutoGenFunctionDef[] {\r\n  return [\r\n    TTS_FUNCTION_DEF,\r\n    MULTI_VOICE_FUNCTION_DEF,\r\n    LIST_VOICES_FUNCTION_DEF,\r\n    LIST_LANGUAGES_FUNCTION_DEF,\r\n  ];\r\n}\r\n"]}