{"version":3,"sources":["../../src/models.ts","../../src/exceptions.ts","../../src/client.ts","../../src/tools/types.ts","../../src/tools/langchain-tools.ts"],"names":[],"mappings":"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","file":"langchain-tools.mjs","sourcesContent":["/**\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 * 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 * 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"]}