{"version":3,"sources":["../src/providers/base-provider.ts","../src/providers/anthropic-provider.ts","../src/providers/google-provider.ts","../src/providers/mock-provider.ts","../src/providers/openai-provider.ts"],"names":["BaseProvider","config","additionalHeaders","url","options","timeout","controller","timeoutId","response","error","errorMessage","errorData","_prompt","_options","_text","_labels","_image","_audio","_code","_language","AnthropicProvider","Anthropic","prompt","model","block","stream","event","text","labels","jsonMatch","label","acc","l","systemPrompt","fullPrompt","code","language","GoogleProvider","GoogleGenerativeAI","modelName","generationConfig","result","chunk","image","base64Image","buffer","features","responseText","MockProvider","customDelay","delayTime","resolve","predefinedResponse","variation","words","word","hash","char","_","i","textLength","hasPositiveWords","hasNegativeWords","selectedIndex","scores","total","sum","score","key","selectedLabel","positiveWords","negativeWords","sentiment","size","style","includeComments","tests","lines","hasFunction","hasClass","value","OpenAIProvider","OpenAI","content","audio","file","transcription","w","arrayBuffer"],"mappings":"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","file":"chunk-6OKKVZHN.cjs","sourcesContent":["import {\n  AIProvider,\n  Classification,\n  CodeGenerationOptions,\n  CodeResult,\n  GenerateOptions,\n  ImageAnalysis,\n  ImageAnalysisOptions,\n  ImageGenerationOptions,\n  ImageResult,\n  SentimentAnalysis,\n  SpeechOptions,\n  SummarizeOptions,\n  TranscriptionOptions,\n  TranscriptionResult,\n} from \"../types\";\n\nexport interface ProviderConfig {\n  name: string;\n  apiKey?: string;\n  baseUrl?: string;\n  model?: string;\n  headers?: Record<string, string>;\n  maxRetries?: number;\n  timeout?: number;\n}\n\nexport abstract class BaseProvider implements AIProvider {\n  public name: string;\n  protected config: ProviderConfig;\n  protected defaultModel: string;\n\n  constructor(config: ProviderConfig) {\n    this.name = config.name;\n    this.config = config;\n    this.defaultModel = config.model || this.getDefaultModel();\n  }\n\n  /**\n   * Get default model for provider\n   */\n  protected abstract getDefaultModel(): string;\n\n  /**\n   * Validate API key format\n   */\n  protected validateApiKey(): void {\n    if (!this.config.apiKey) {\n      throw new Error(`API key required for ${this.name} provider`);\n    }\n  }\n\n  /**\n   * Get headers for API requests\n   */\n  protected getHeaders(\n    additionalHeaders?: Record<string, string>\n  ): Record<string, string> {\n    return {\n      \"Content-Type\": \"application/json\",\n      ...this.config.headers,\n      ...additionalHeaders,\n    };\n  }\n\n  /**\n   * Make API request with error handling\n   */\n  protected async makeRequest<T>(\n    url: string,\n    options: RequestInit\n  ): Promise<T> {\n    const timeout = this.config.timeout || 30000;\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n    try {\n      const response = await fetch(url, {\n        ...options,\n        signal: controller.signal,\n      });\n\n      if (!response.ok) {\n        const error = await this.parseError(response);\n        throw error;\n      }\n\n      return await response.json();\n    } catch (error: any) {\n      if (error.name === \"AbortError\") {\n        throw new Error(`Request timeout after ${timeout}ms`);\n      }\n      throw error;\n    } finally {\n      clearTimeout(timeoutId);\n    }\n  }\n\n  /**\n   * Parse API error response\n   */\n  protected async parseError(response: Response): Promise<Error> {\n    let errorMessage = `${this.name} API error: ${response.status} ${response.statusText}`;\n\n    try {\n      const errorData = await response.json();\n      if (errorData.error?.message) {\n        errorMessage = errorData.error.message;\n      } else if (errorData.message) {\n        errorMessage = errorData.message;\n      }\n    } catch {\n      // Use default error message if parsing fails\n    }\n\n    const error = new Error(errorMessage) as any;\n    error.status = response.status;\n    error.provider = this.name;\n\n    return error;\n  }\n\n  /**\n   * Get model to use for request\n   */\n  protected getModel(options?: { model?: string }): string {\n    return options?.model || this.config.model || this.defaultModel;\n  }\n\n  // Default implementations that throw not implemented errors\n  async generateText(\n    _prompt: string,\n    _options?: GenerateOptions\n  ): Promise<string> {\n    throw new Error(\n      `Text generation not implemented for ${this.name} provider`\n    );\n  }\n\n  async *generateStream(\n    _prompt: string,\n    _options?: GenerateOptions\n  ): AsyncGenerator<string> {\n    throw new Error(\n      `Stream generation not implemented for ${this.name} provider`\n    );\n  }\n\n  async generateEmbedding(_text: string): Promise<number[]> {\n    throw new Error(\n      `Embedding generation not implemented for ${this.name} provider`\n    );\n  }\n\n  async classifyText(\n    _text: string,\n    _labels: string[]\n  ): Promise<Classification> {\n    throw new Error(\n      `Text classification not implemented for ${this.name} provider`\n    );\n  }\n\n  async summarize(_text: string, _options?: SummarizeOptions): Promise<string> {\n    throw new Error(\n      `Text summarization not implemented for ${this.name} provider`\n    );\n  }\n\n  async analyzeSentiment(_text: string): Promise<SentimentAnalysis> {\n    throw new Error(\n      `Sentiment analysis not implemented for ${this.name} provider`\n    );\n  }\n\n  async generateImage(\n    _prompt: string,\n    _options?: ImageGenerationOptions\n  ): Promise<ImageResult> {\n    throw new Error(\n      `Image generation not implemented for ${this.name} provider`\n    );\n  }\n\n  async analyzeImage(\n    _image: string | Blob,\n    _options?: ImageAnalysisOptions\n  ): Promise<ImageAnalysis> {\n    throw new Error(`Image analysis not implemented for ${this.name} provider`);\n  }\n\n  async transcribeAudio(\n    _audio: Blob,\n    _options?: TranscriptionOptions\n  ): Promise<TranscriptionResult> {\n    throw new Error(\n      `Audio transcription not implemented for ${this.name} provider`\n    );\n  }\n\n  async generateSpeech(_text: string, _options?: SpeechOptions): Promise<Blob> {\n    throw new Error(\n      `Speech generation not implemented for ${this.name} provider`\n    );\n  }\n\n  async generateCode(\n    _prompt: string,\n    _options?: CodeGenerationOptions\n  ): Promise<CodeResult> {\n    throw new Error(\n      `Code generation not implemented for ${this.name} provider`\n    );\n  }\n\n  async explainCode(_code: string, _language?: string): Promise<string> {\n    throw new Error(\n      `Code explanation not implemented for ${this.name} provider`\n    );\n  }\n}\n","import Anthropic from \"@anthropic-ai/sdk\";\nimport { Classification, GenerateOptions, SummarizeOptions } from \"../types\";\nimport { BaseProvider, ProviderConfig } from \"./base-provider\";\n\nexport class AnthropicProvider extends BaseProvider {\n  private client: Anthropic;\n\n  constructor(config: ProviderConfig) {\n    super(config);\n    this.validateApiKey();\n\n    this.client = new Anthropic({\n      apiKey: this.config.apiKey!,\n      baseURL: this.config.baseUrl,\n      timeout: this.config.timeout,\n      maxRetries: this.config.maxRetries || 2,\n    });\n  }\n\n  protected getDefaultModel(): string {\n    return \"claude-3-sonnet-20240229\";\n  }\n\n  /**\n   * Generate text completion\n   */\n  override async generateText(\n    prompt: string,\n    options?: GenerateOptions\n  ): Promise<string> {\n    const model = this.getModel(options as { model?: string });\n\n    const response = await this.client.messages.create({\n      model,\n      messages: [\n        {\n          role: \"user\",\n          content: prompt,\n        },\n      ],\n      system: options?.systemPrompt,\n      max_tokens: options?.maxTokens || 1000,\n      temperature: options?.temperature,\n      top_p: options?.topP,\n      top_k: options?.topK,\n      stop_sequences: options?.stopSequences,\n      stream: false,\n    });\n\n    // Extract text from content blocks\n    const content = response.content\n      .filter((block) => block.type === \"text\")\n      .map((block) => (block as any).text)\n      .join(\"\\n\");\n\n    return content;\n  }\n\n  /**\n   * Generate streaming text completion\n   */\n  override async *generateStream(\n    prompt: string,\n    options?: GenerateOptions\n  ): AsyncGenerator<string> {\n    const model = this.getModel(options as { model?: string });\n\n    const stream = await this.client.messages.create({\n      model,\n      messages: [\n        {\n          role: \"user\",\n          content: prompt,\n        },\n      ],\n      system: options?.systemPrompt,\n      max_tokens: options?.maxTokens || 1000,\n      temperature: options?.temperature,\n      top_p: options?.topP,\n      top_k: options?.topK,\n      stop_sequences: options?.stopSequences,\n      stream: true,\n    });\n\n    for await (const event of stream) {\n      if (\n        event.type === \"content_block_delta\" &&\n        event.delta.type === \"text_delta\"\n      ) {\n        yield event.delta.text;\n      }\n    }\n  }\n\n  /**\n   * Classify text\n   */\n  override async classifyText(\n    text: string,\n    labels: string[]\n  ): Promise<Classification> {\n    const prompt = `Classify this text into exactly one category from: ${labels.join(\", \")}.\n\nText: \"${text}\"\n\nRespond with a JSON object:\n{\n  \"label\": \"chosen category\",\n  \"confidence\": 0.0-1.0,\n  \"scores\": { \"category1\": 0.0-1.0, ... }\n}`;\n\n    const response = await this.generateText(prompt, {\n      temperature: 0,\n      maxTokens: 200,\n    });\n\n    try {\n      // Extract JSON from response\n      const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n      if (jsonMatch) {\n        return JSON.parse(jsonMatch[0]);\n      }\n    } catch {\n      // Fallback parsing\n    }\n\n    // Fallback response\n    const label = labels[0] ?? \"\";\n    return {\n      label,\n      confidence: 0.5,\n      scores: labels.reduce(\n        (acc, l) => ({\n          ...acc,\n          [l]: l === label ? 0.5 : 0.5 / (labels.length - 1),\n        }),\n        {}\n      ),\n    };\n  }\n\n  /**\n   * Summarize text\n   */\n  override async summarize(\n    text: string,\n    options?: SummarizeOptions\n  ): Promise<string> {\n    const instructions = {\n      bullet: \"Create a bullet-point summary with key points\",\n      paragraph: \"Write a concise paragraph summary\",\n      tldr: \"Write a one-sentence TL;DR\",\n      \"key-points\": \"Extract the most important key points\",\n      executive: \"Write an executive summary for business leaders\",\n    };\n\n    const prompt = `${instructions[options?.style || \"paragraph\"]} of the following text.\n${options?.maxLength ? `Keep it under ${options.maxLength} characters.` : \"\"}\n\nText:\n\"${text}\"\n\nSummary:`;\n\n    return this.generateText(prompt, {\n      maxTokens: options?.maxLength ? Math.ceil(options.maxLength / 4) : 200,\n      temperature: 0.3,\n    });\n  }\n\n  /**\n   * Analyze sentiment\n   */\n  override async analyzeSentiment(text: string): Promise<any> {\n    const prompt = `Analyze the sentiment of the following text. Respond with JSON:\n{\n  \"sentiment\": \"positive\" | \"negative\" | \"neutral\" | \"mixed\",\n  \"score\": 0.0-1.0,\n  \"aspects\": [\n    { \"aspect\": \"...\", \"sentiment\": \"...\", \"score\": 0.0-1.0 }\n  ]\n}\n\nText: \"${text}\"`;\n\n    const response = await this.generateText(prompt, {\n      temperature: 0,\n      maxTokens: 300,\n    });\n\n    try {\n      const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n      if (jsonMatch) {\n        return JSON.parse(jsonMatch[0]);\n      }\n    } catch {\n      // Fallback\n    }\n\n    return {\n      sentiment: \"neutral\",\n      score: 0.5,\n      aspects: [],\n    };\n  }\n\n  /**\n   * Generate embeddings (not supported by Anthropic)\n   */\n  override async generateEmbedding(_text: string): Promise<number[]> {\n    throw new Error(\n      \"Embeddings not supported by Anthropic. Use a different provider.\"\n    );\n  }\n\n  /**\n   * Generate code\n   */\n  override async generateCode(prompt: string, options?: any): Promise<any> {\n    const systemPrompt = `You are Claude, an expert programmer. Generate clean, efficient code.\n${options?.includeComments ? \"Include helpful comments.\" : \"\"}\n${options?.includeTests ? \"Include unit tests.\" : \"\"}\nAlways respond with valid JSON containing: code, language, explanation, and dependencies array.`;\n\n    const fullPrompt = `Language: ${options?.language || \"auto-detect\"}\nFramework: ${options?.framework || \"none\"}\n\nTask: ${prompt}\n\nRespond with JSON:\n{\n  \"code\": \"the generated code\",\n  \"language\": \"detected or specified language\",\n  \"explanation\": \"brief explanation\",\n  ${options?.includeTests ? '\"tests\": \"unit test code\",' : \"\"}\n  \"dependencies\": [\"required\", \"packages\"]\n}`;\n\n    const response = await this.generateText(fullPrompt, {\n      systemPrompt,\n      temperature: 0.2,\n      maxTokens: 2000,\n    });\n\n    try {\n      const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n      if (jsonMatch) {\n        return JSON.parse(jsonMatch[0]);\n      }\n    } catch {\n      // Fallback\n    }\n\n    return {\n      code: response,\n      language: options?.language || \"unknown\",\n      explanation: \"Generated code\",\n      dependencies: [],\n    };\n  }\n\n  /**\n   * Explain code\n   */\n  override async explainCode(code: string, language?: string): Promise<string> {\n    const prompt = `Explain this ${language || \"code\"} in detail:\n\n\\`\\`\\`${language || \"\"}\n${code}\n\\`\\`\\`\n\nExplain:\n1. What it does\n2. How it works\n3. Key concepts/patterns\n4. Potential improvements`;\n\n    return this.generateText(prompt, {\n      temperature: 0.3,\n      maxTokens: 1000,\n    });\n  }\n\n  /**\n  //  * Extract token usage from response\n  //  */\n  // private _extractTokenUsage(usage: any): TokenUsage {\n  //   return {\n  //     promptTokens: usage?.input_tokens || 0,\n  //     completionTokens: usage?.output_tokens || 0,\n  //     totalTokens: (usage?.input_tokens || 0) + (usage?.output_tokens || 0),\n  //   };\n  // }\n}\n","import { GoogleGenerativeAI } from \"@google/generative-ai\";\nimport {\n  Classification,\n  GenerateOptions,\n  ImageAnalysis,\n  ImageAnalysisOptions,\n  SummarizeOptions,\n} from \"../types\";\nimport { BaseProvider, ProviderConfig } from \"./base-provider\";\n\nexport class GoogleProvider extends BaseProvider {\n  private client: GoogleGenerativeAI;\n\n  constructor(config: ProviderConfig) {\n    super(config);\n    this.validateApiKey();\n\n    this.client = new GoogleGenerativeAI(this.config.apiKey!);\n  }\n\n  protected getDefaultModel(): string {\n    return \"gemini-pro\";\n  }\n\n  /**\n   * Generate text completion\n   */\n  override async generateText(\n    prompt: string,\n    options?: GenerateOptions\n  ): Promise<string> {\n    const modelName = this.getModel(options as { model?: string });\n    const model = this.client.getGenerativeModel({ model: modelName });\n\n    // Configure generation settings\n    const generationConfig = {\n      maxOutputTokens: options?.maxTokens || 1000,\n      temperature: options?.temperature || 0.7,\n      topP: options?.topP || 0.95,\n      topK: options?.topK || 40,\n      stopSequences: options?.stopSequences,\n    };\n\n    // Build prompt with system message if provided\n    const fullPrompt = options?.systemPrompt\n      ? `${options.systemPrompt}\\n\\n${prompt}`\n      : prompt;\n\n    const result = await model.generateContent({\n      contents: [{ role: \"user\", parts: [{ text: fullPrompt }] }],\n      generationConfig,\n    });\n\n    const response = await result.response;\n    return response.text();\n  }\n\n  /**\n   * Generate streaming text completion\n   */\n  override async *generateStream(\n    prompt: string,\n    options?: GenerateOptions\n  ): AsyncGenerator<string> {\n    const modelName = this.getModel(options as { model?: string });\n    const model = this.client.getGenerativeModel({ model: modelName });\n\n    const generationConfig = {\n      maxOutputTokens: options?.maxTokens || 1000,\n      temperature: options?.temperature || 0.7,\n      topP: options?.topP || 0.95,\n      topK: options?.topK || 40,\n      stopSequences: options?.stopSequences,\n    };\n\n    const fullPrompt = options?.systemPrompt\n      ? `${options.systemPrompt}\\n\\n${prompt}`\n      : prompt;\n\n    const result = await model.generateContentStream({\n      contents: [{ role: \"user\", parts: [{ text: fullPrompt }] }],\n      generationConfig,\n    });\n\n    for await (const chunk of result.stream) {\n      const text = chunk.text();\n      if (text) {\n        yield text;\n      }\n    }\n  }\n\n  /**\n   * Generate embeddings\n   */\n  override async generateEmbedding(text: string): Promise<number[]> {\n    const model = this.client.getGenerativeModel({ model: \"embedding-001\" });\n\n    const result = await model.embedContent(text);\n    return result.embedding.values;\n  }\n\n  /**\n   * Classify text\n   */\n  override async classifyText(\n    text: string,\n    labels: string[]\n  ): Promise<Classification> {\n    const prompt = `Classify the following text into exactly one of these categories: ${labels.join(\", \")}.\n\nText: \"${text}\"\n\nRespond with only JSON in this format:\n{\n  \"label\": \"chosen category\",\n  \"confidence\": 0.95,\n  \"scores\": {\n    \"category1\": 0.95,\n    \"category2\": 0.03,\n    \"category3\": 0.02\n  }\n}`;\n\n    const response = await this.generateText(prompt, {\n      temperature: 0,\n      maxTokens: 200,\n    });\n\n    try {\n      // Extract JSON from response\n      const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n      if (jsonMatch) {\n        return JSON.parse(jsonMatch[0]);\n      }\n    } catch {\n      // Fallback\n    }\n\n    // Default response\n    const label = labels[0] || \"unknown\";\n    return {\n      label,\n      confidence: 0.5,\n      scores: labels.reduce(\n        (acc, l) => ({\n          ...acc,\n          [l]: l === label ? 0.5 : 0.5 / (labels.length - 1),\n        }),\n        {}\n      ),\n    };\n  }\n\n  /**\n   * Summarize text\n   */\n  override async summarize(\n    text: string,\n    options?: SummarizeOptions\n  ): Promise<string> {\n    const styleInstructions = {\n      bullet: \"Create a concise bullet-point summary\",\n      paragraph: \"Write a well-structured paragraph summary\",\n      tldr: \"Provide a single sentence TL;DR\",\n      \"key-points\": \"List only the most critical key points\",\n      executive: \"Write a professional executive summary\",\n    };\n\n    const prompt = `${styleInstructions[options?.style || \"paragraph\"]} of this text:\n\n\"${text}\"\n\n${options?.maxLength ? `Limit to ${options.maxLength} characters.` : \"\"}`;\n\n    return this.generateText(prompt, {\n      maxTokens: options?.maxLength ? Math.ceil(options.maxLength / 4) : 200,\n      temperature: 0.3,\n    });\n  }\n\n  /**\n   * Analyze image (Gemini Pro Vision)\n   */\n  override async analyzeImage(\n    image: string | Blob,\n    options?: ImageAnalysisOptions\n  ): Promise<ImageAnalysis> {\n    const model = this.client.getGenerativeModel({\n      model: \"gemini-pro-vision\",\n    });\n\n    // Convert image to base64 if needed\n    let base64Image: string;\n    if (image instanceof Blob) {\n      const buffer = await image.arrayBuffer();\n      base64Image = btoa(String.fromCharCode(...new Uint8Array(buffer)));\n    } else {\n      base64Image = image.replace(/^data:image\\/\\w+;base64,/, \"\");\n    }\n\n    const features = options?.features || [\"description\", \"objects\", \"text\"];\n    const prompt = `Analyze this image and provide a detailed response in JSON format with these features: ${features.join(\", \")}.\n\nExpected format:\n{\n  ${features.includes(\"description\") ? '\"description\": \"detailed description\",' : \"\"}\n  ${features.includes(\"objects\") ? '\"objects\": [{\"label\": \"object\", \"confidence\": 0.9}],' : \"\"}\n  ${features.includes(\"text\") ? '\"text\": [{\"text\": \"extracted text\", \"confidence\": 0.9}],' : \"\"}\n  ${features.includes(\"colors\") ? '\"colors\": [{\"hex\": \"#000000\", \"name\": \"black\", \"percentage\": 30}],' : \"\"}\n  ${features.includes(\"tags\") ? '\"tags\": [\"tag1\", \"tag2\"]' : \"\"}\n}`;\n\n    const result = await model.generateContent({\n      contents: [\n        {\n          role: \"user\",\n          parts: [\n            { text: prompt },\n            {\n              inlineData: {\n                mimeType: \"image/jpeg\",\n                data: base64Image,\n              },\n            },\n          ],\n        },\n      ],\n    });\n\n    const response = await result.response;\n    const responseText = response.text();\n\n    try {\n      const jsonMatch = responseText.match(/\\{[\\s\\S]*\\}/);\n      if (jsonMatch) {\n        return JSON.parse(jsonMatch[0]);\n      }\n    } catch {\n      // Fallback\n    }\n\n    return {\n      description: responseText,\n      objects: [],\n      text: [],\n      colors: [],\n      tags: [],\n    };\n  }\n\n  /**\n   * Generate code\n   */\n  override async generateCode(prompt: string, options?: any): Promise<any> {\n    const systemContext = `You are an expert programmer. Generate high-quality code.\n${options?.includeComments ? \"Include clear comments.\" : \"\"}\n${options?.includeTests ? \"Include comprehensive tests.\" : \"\"}\nStyle: ${options?.style || \"clean and efficient\"}`;\n\n    const fullPrompt = `${systemContext}\n\nLanguage: ${options?.language || \"auto-detect\"}\nFramework: ${options?.framework || \"none\"}\nTask: ${prompt}\n\nProvide response as JSON:\n{\n  \"code\": \"complete code\",\n  \"language\": \"programming language\",\n  \"explanation\": \"what the code does\",\n  ${options?.includeTests ? '\"tests\": \"test code\",' : \"\"}\n  \"dependencies\": [\"list\", \"of\", \"dependencies\"]\n}`;\n\n    const response = await this.generateText(fullPrompt, {\n      temperature: 0.2,\n      maxTokens: 2000,\n    });\n\n    try {\n      const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n      if (jsonMatch) {\n        return JSON.parse(jsonMatch[0]);\n      }\n    } catch {\n      // Fallback\n    }\n\n    return {\n      code: response,\n      language: options?.language || \"unknown\",\n      explanation: \"Generated code\",\n    };\n  }\n\n  /**\n   * Explain code\n   */\n  override async explainCode(code: string, language?: string): Promise<string> {\n    const prompt = `Analyze and explain this ${language || \"code\"}:\n\n\\`\\`\\`${language || \"\"}\n${code}\n\\`\\`\\`\n\nProvide a comprehensive explanation covering:\n1. Purpose and functionality\n2. How it works step by step\n3. Key algorithms or patterns used\n4. Complexity analysis\n5. Potential optimizations or issues`;\n\n    return this.generateText(prompt, {\n      temperature: 0.3,\n      maxTokens: 1500,\n    });\n  }\n}\n","import {\n  Classification,\n  CodeGenerationOptions,\n  CodeResult,\n  GenerateOptions,\n  ImageGenerationOptions,\n  ImageResult,\n  SentimentAnalysis,\n  SummarizeOptions,\n} from \"../types\";\nimport { BaseProvider, ProviderConfig } from \"./base-provider\";\n\ninterface MockProviderOptions extends ProviderConfig {\n  delay?: number;\n  shouldFail?: boolean;\n  failureRate?: number;\n  responses?: Map<string, string>;\n}\n\nexport class MockProvider extends BaseProvider {\n  private delay: number;\n  private shouldFail: boolean;\n  private failureRate: number;\n  private responses: Map<string, string>;\n  private requestCount = 0;\n\n  constructor(config: MockProviderOptions) {\n    super(config);\n    this.delay = config.delay || 100;\n    this.shouldFail = config.shouldFail || false;\n    this.failureRate = config.failureRate || 0;\n    this.responses = config.responses || new Map();\n  }\n\n  protected getDefaultModel(): string {\n    return \"mock-model-v1\";\n  }\n\n  /**\n   * Simulate delay\n   */\n  private async simulateDelay(customDelay?: number): Promise<void> {\n    const delayTime = customDelay || this.delay;\n    if (delayTime > 0) {\n      await new Promise((resolve) => setTimeout(resolve, delayTime));\n    }\n  }\n\n  /**\n   * Check if request should fail\n   */\n  private shouldFailRequest(): boolean {\n    this.requestCount++;\n\n    if (this.shouldFail) return true;\n\n    if (this.failureRate > 0) {\n      return Math.random() < this.failureRate;\n    }\n\n    return false;\n  }\n\n  /**\n   * Generate text completion\n   */\n  override async generateText(\n    prompt: string,\n    options?: GenerateOptions\n  ): Promise<string> {\n    await this.simulateDelay();\n\n    if (this.shouldFailRequest()) {\n      throw new Error(\"Mock provider error: Simulated failure\");\n    }\n\n    // Check for predefined response\n    const predefinedResponse = this.responses.get(prompt);\n    if (predefinedResponse) {\n      return predefinedResponse;\n    }\n\n    // Generate mock response\n    const temperature = options?.temperature || 0.7;\n    const variation =\n      temperature > 0.5 ? \" (creative mode)\" : \" (precise mode)\";\n\n    return `Mock response to: \"${prompt.substring(0, 50)}...\"${variation}\nModel: ${this.getModel(options as { model?: string })}\nMax tokens: ${options?.maxTokens || \"default\"}\nSystem: ${options?.systemPrompt || \"none\"}\nGenerated at: ${new Date().toISOString()}`;\n  }\n\n  /**\n   * Generate streaming text completion\n   */\n  override async *generateStream(\n    prompt: string,\n    options?: GenerateOptions\n  ): AsyncGenerator<string> {\n    const response = await this.generateText(prompt, options);\n    const words = response.split(\" \");\n\n    for (const word of words) {\n      await this.simulateDelay(20);\n      yield word + \" \";\n    }\n  }\n\n  /**\n   * Generate embeddings\n   */\n  override async generateEmbedding(text: string): Promise<number[]> {\n    await this.simulateDelay();\n\n    if (this.shouldFailRequest()) {\n      throw new Error(\"Mock provider error: Embedding generation failed\");\n    }\n\n    // Generate deterministic mock embedding based on text\n    const hash = text\n      .split(\"\")\n      .reduce((acc, char) => acc + char.charCodeAt(0), 0);\n    const embedding = new Array(1536).fill(0).map((_, i) => {\n      return Math.sin(hash + i) * 0.1 + Math.cos(hash - i) * 0.05;\n    });\n\n    return embedding;\n  }\n\n  /**\n   * Classify text\n   */\n  override async classifyText(\n    text: string,\n    labels: string[]\n  ): Promise<Classification> {\n    await this.simulateDelay();\n\n    if (this.shouldFailRequest()) {\n      throw new Error(\"Mock provider error: Classification failed\");\n    }\n\n    // Mock classification based on text length and content\n    const textLength = text.length;\n    const hasPositiveWords = /good|great|excellent|happy|love/i.test(text);\n    const hasNegativeWords = /bad|terrible|hate|awful|poor/i.test(text);\n\n    let selectedIndex = textLength % labels.length;\n    if (hasPositiveWords && labels.includes(\"positive\")) {\n      selectedIndex = labels.indexOf(\"positive\");\n    } else if (hasNegativeWords && labels.includes(\"negative\")) {\n      selectedIndex = labels.indexOf(\"negative\");\n    }\n\n    const scores = labels.reduce(\n      (acc, label, i) => {\n        acc[label] =\n          i === selectedIndex\n            ? 0.8 + Math.random() * 0.15\n            : Math.random() * 0.2;\n        return acc;\n      },\n      {} as Record<string, number>\n    );\n\n    // Normalize scores\n    const total = Object.values(scores).reduce((sum, score) => sum + score, 0);\n    Object.keys(scores).forEach((key) => {\n      scores[key] = (scores[key] ?? 0) / total;\n    });\n\n    const selectedLabel = labels[selectedIndex] ?? \"unknown\";\n    return {\n      label: selectedLabel,\n      confidence: scores[selectedLabel] ?? 0,\n      scores,\n    };\n  }\n\n  /**\n   * Summarize text\n   */\n  override async summarize(\n    text: string,\n    options?: SummarizeOptions\n  ): Promise<string> {\n    await this.simulateDelay();\n\n    if (this.shouldFailRequest()) {\n      throw new Error(\"Mock provider error: Summarization failed\");\n    }\n\n    const words = text.split(\" \");\n    const style = options?.style || \"paragraph\";\n\n    switch (style) {\n      case \"bullet\":\n        return `• First point about \"${words.slice(0, 5).join(\" \")}...\"\n• Key insight from the middle section\n• Final conclusion regarding \"${words.slice(-5).join(\" \")}\"`;\n\n      case \"tldr\":\n        return `TL;DR: ${words.slice(0, 10).join(\" \")}... (${words.length} words total)`;\n\n      case \"key-points\":\n        return `Key Points:\n1. Main topic: ${words[0]}\n2. Important detail: ${words[Math.floor(words.length / 2)]}\n3. Conclusion: ${words[words.length - 1]}`;\n\n      case \"executive\":\n        return `Executive Summary: This document discusses ${words.slice(0, 5).join(\" \")}.\nThe analysis reveals important insights about the subject matter.\nStrategic recommendations include further investigation of key areas.`;\n\n      default:\n        return `Summary: ${words.slice(0, 20).join(\" \")}...\nThe text contains ${words.length} words and covers various topics.`;\n    }\n  }\n\n  /**\n   * Analyze sentiment\n   */\n  override async analyzeSentiment(text: string): Promise<SentimentAnalysis> {\n    await this.simulateDelay();\n\n    if (this.shouldFailRequest()) {\n      throw new Error(\"Mock provider error: Sentiment analysis failed\");\n    }\n\n    const positiveWords = (\n      text.match(/good|great|excellent|happy|love|wonderful/gi) || []\n    ).length;\n    const negativeWords = (\n      text.match(/bad|terrible|hate|awful|poor|horrible/gi) || []\n    ).length;\n\n    let sentiment: \"positive\" | \"negative\" | \"neutral\" | \"mixed\";\n    let score: number;\n\n    if (positiveWords > negativeWords * 2) {\n      sentiment = \"positive\";\n      score = 0.7 + Math.random() * 0.25;\n    } else if (negativeWords > positiveWords * 2) {\n      sentiment = \"negative\";\n      score = 0.2 + Math.random() * 0.2;\n    } else if (positiveWords > 0 && negativeWords > 0) {\n      sentiment = \"mixed\";\n      score = 0.4 + Math.random() * 0.2;\n    } else {\n      sentiment = \"neutral\";\n      score = 0.45 + Math.random() * 0.1;\n    }\n\n    return {\n      sentiment,\n      score,\n      aspects: [\n        {\n          aspect: \"tone\",\n          sentiment: sentiment,\n          score: score,\n        },\n      ],\n    };\n  }\n\n  /**\n   * Generate image\n   */\n  override async generateImage(\n    prompt: string,\n    options?: ImageGenerationOptions\n  ): Promise<ImageResult> {\n    await this.simulateDelay(500); // Longer delay for image generation\n\n    if (this.shouldFailRequest()) {\n      throw new Error(\"Mock provider error: Image generation failed\");\n    }\n\n    const size = options?.size || \"1024x1024\";\n    const style = options?.style || \"realistic\";\n\n    return {\n      url: `https://picsum.photos/${size.split(\"x\")[0]}/${size.split(\"x\")[1]}?random=${Date.now()}`,\n      base64: undefined,\n      revisedPrompt: `Enhanced prompt: ${prompt} in ${style} style`,\n      metadata: {\n        model: \"mock-dalle\",\n        size,\n        style,\n        seed: options?.seed || Math.floor(Math.random() * 1000000),\n      },\n    };\n  }\n\n  /**\n   * Generate code\n   */\n  override async generateCode(\n    prompt: string,\n    options?: CodeGenerationOptions\n  ): Promise<CodeResult> {\n    await this.simulateDelay();\n\n    if (this.shouldFailRequest()) {\n      throw new Error(\"Mock provider error: Code generation failed\");\n    }\n\n    const language = options?.language || \"javascript\";\n    const includeComments = options?.includeComments ?? true;\n\n    const code = `${includeComments ? \"// Mock generated code\\n\" : \"\"}\nfunction mockFunction() {\n  ${includeComments ? \"// Implementation for: \" + prompt.substring(0, 50) + \"\\n  \" : \"\"}\n  console.log(\"This is mock generated code\");\n  return {\n    prompt: \"${prompt.substring(0, 30)}...\",\n    language: \"${language}\",\n    timestamp: new Date().toISOString()\n  };\n}`;\n\n    const tests = options?.includeTests\n      ? `\ndescribe('mockFunction', () => {\n  it('should return expected output', () => {\n    const result = mockFunction();\n    expect(result).toBeDefined();\n    expect(result.language).toBe('${language}');\n  });\n});`\n      : undefined;\n\n    return {\n      code,\n      language,\n      explanation: `This is a mock implementation for: ${prompt}`,\n      tests,\n      dependencies: language === \"javascript\" ? [] : [\"mock-dependency\"],\n    };\n  }\n\n  /**\n   * Explain code\n   */\n  override async explainCode(code: string, language?: string): Promise<string> {\n    await this.simulateDelay();\n\n    if (this.shouldFailRequest()) {\n      throw new Error(\"Mock provider error: Code explanation failed\");\n    }\n\n    const lines = code.split(\"\\n\").length;\n    const hasFunction = /function|=>|def|fn/.test(code);\n    const hasClass = /class|struct|interface/.test(code);\n\n    return `Mock Code Explanation:\n\nThis ${language || \"code\"} snippet contains ${lines} lines.\n\nKey observations:\n${hasFunction ? \"- Contains function definitions\\n\" : \"\"}${hasClass ? \"- Defines class or structural types\\n\" : \"\"}- Uses ${language || \"modern programming\"} syntax\n- Implements mock functionality for testing\n\nThe code structure suggests it's designed for demonstration purposes.\nIn a real implementation, this would ${hasFunction ? \"execute the defined functions\" : \"define the specified behavior\"}.\n\nMock analysis completed at: ${new Date().toISOString()}`;\n  }\n\n  /**\n   * Configure mock behavior\n   */\n  configure(options: Partial<MockProviderOptions>): void {\n    if (options.delay !== undefined) this.delay = options.delay;\n    if (options.shouldFail !== undefined) this.shouldFail = options.shouldFail;\n    if (options.failureRate !== undefined)\n      this.failureRate = options.failureRate;\n    if (options.responses) {\n      options.responses.forEach((value, key) => {\n        this.responses.set(key, value);\n      });\n    }\n  }\n\n  /**\n   * Get request statistics\n   */\n  getStats() {\n    return {\n      totalRequests: this.requestCount,\n      failureRate: this.failureRate,\n      shouldFail: this.shouldFail,\n      averageDelay: this.delay,\n      predefinedResponses: this.responses.size,\n    };\n  }\n\n  /**\n   * Reset mock provider\n   */\n  reset(): void {\n    this.requestCount = 0;\n    this.responses.clear();\n    this.shouldFail = false;\n    this.failureRate = 0;\n  }\n}\n","import OpenAI from \"openai\";\nimport {\n  Classification,\n  CodeGenerationOptions,\n  CodeResult,\n  GenerateOptions,\n  ImageGenerationOptions,\n  ImageResult,\n  SpeechOptions,\n  SummarizeOptions,\n  TranscriptionOptions,\n  TranscriptionResult,\n} from \"../types\";\nimport { BaseProvider, ProviderConfig } from \"./base-provider\";\n\nexport class OpenAIProvider extends BaseProvider {\n  private client: OpenAI;\n\n  constructor(config: ProviderConfig) {\n    super(config);\n    this.validateApiKey();\n\n    this.client = new OpenAI({\n      apiKey: this.config.apiKey,\n      baseURL: this.config.baseUrl,\n      timeout: this.config.timeout,\n      maxRetries: this.config.maxRetries || 2,\n    });\n  }\n\n  protected getDefaultModel(): string {\n    return \"gpt-3.5-turbo\";\n  }\n\n  /**\n   * Generate text completion\n   */\n  override async generateText(\n    prompt: string,\n    options?: GenerateOptions\n  ): Promise<string> {\n    const model = this.getModel(options as { model?: string });\n\n    const completion = await this.client.chat.completions.create({\n      model,\n      messages: [\n        {\n          role: \"system\",\n          content: options?.systemPrompt || \"You are a helpful assistant.\",\n        },\n        {\n          role: \"user\",\n          content: prompt,\n        },\n      ],\n      max_tokens: options?.maxTokens,\n      temperature: options?.temperature,\n      top_p: options?.topP,\n      frequency_penalty: options?.frequencyPenalty,\n      presence_penalty: options?.presencePenalty,\n      stop: options?.stopSequences,\n      seed: options?.seed,\n      response_format: options?.responseFormat,\n      functions: options?.functions as any,\n      stream: false,\n    });\n\n    return completion.choices[0]?.message?.content || \"\";\n  }\n\n  /**\n   * Generate streaming text completion\n   */\n  override async *generateStream(\n    prompt: string,\n    options?: GenerateOptions\n  ): AsyncGenerator<string> {\n    const model = this.getModel(options as { model?: string });\n\n    const stream = await this.client.chat.completions.create({\n      model,\n      messages: [\n        {\n          role: \"system\",\n          content: options?.systemPrompt || \"You are a helpful assistant.\",\n        },\n        {\n          role: \"user\",\n          content: prompt,\n        },\n      ],\n      max_tokens: options?.maxTokens,\n      temperature: options?.temperature,\n      top_p: options?.topP,\n      frequency_penalty: options?.frequencyPenalty,\n      presence_penalty: options?.presencePenalty,\n      stop: options?.stopSequences,\n      seed: options?.seed,\n      stream: true,\n    });\n\n    for await (const chunk of stream) {\n      const content = chunk.choices[0]?.delta?.content;\n      if (content) {\n        yield content;\n      }\n    }\n  }\n\n  /**\n   * Generate embeddings\n   */\n  override async generateEmbedding(text: string): Promise<number[]> {\n    const response = await this.client.embeddings.create({\n      model: \"text-embedding-ada-002\",\n      input: text,\n    });\n\n    return response.data[0]?.embedding || [];\n  }\n\n  /**\n   * Classify text (using completion)\n   */\n  override async classifyText(\n    text: string,\n    labels: string[]\n  ): Promise<Classification> {\n    const prompt = `Classify the following text into one of these categories: ${labels.join(\", \")}.\n\nText: \"${text}\"\n\nRespond with a JSON object containing:\n- label: the chosen category\n- confidence: a number between 0 and 1\n- scores: an object with confidence scores for each category\n\nResponse:`;\n\n    const response = await this.generateText(prompt, {\n      temperature: 0,\n      maxTokens: 200,\n      responseFormat: { type: \"json_object\" },\n    });\n\n    try {\n      return JSON.parse(response);\n    } catch {\n      // Fallback if JSON parsing fails\n      const label = labels[0] || \"unknown\";\n      return {\n        label,\n        confidence: 0.5,\n        scores: labels.reduce(\n          (acc, l) => ({\n            ...acc,\n            [l]: l === label ? 0.5 : 0.5 / (labels.length - 1),\n          }),\n          {}\n        ),\n      };\n    }\n  }\n\n  /**\n   * Summarize text\n   */\n  override async summarize(\n    text: string,\n    options?: SummarizeOptions\n  ): Promise<string> {\n    const stylePrompts = {\n      bullet: \"Create a bullet-point summary with key points.\",\n      paragraph: \"Write a concise paragraph summary.\",\n      tldr: \"Write a one-sentence TL;DR summary.\",\n      \"key-points\": \"Extract and list the most important key points.\",\n      executive: \"Write an executive summary suitable for business leaders.\",\n    };\n\n    const prompt = `${stylePrompts[options?.style || \"paragraph\"]}\n\nText to summarize:\n\"${text}\"\n\nSummary:`;\n\n    return this.generateText(prompt, {\n      maxTokens: options?.maxLength || 200,\n      temperature: 0.3,\n    });\n  }\n\n  /**\n   * Generate images\n   */\n  override async generateImage(\n    prompt: string,\n    options?: ImageGenerationOptions\n  ): Promise<ImageResult> {\n    const response = await this.client.images.generate({\n      model: \"dall-e-3\",\n      prompt,\n      n: options?.n || 1,\n      size: options?.size || \"1024x1024\",\n      quality: options?.quality || \"standard\",\n      style: options?.style === \"realistic\" ? \"natural\" : \"vivid\",\n      response_format: \"url\",\n    });\n\n    if (!response.data) throw new Error(\"No image data returned.\");\n\n    const image = response.data[0];\n\n    return {\n      url: image?.url || \"\",\n      revisedPrompt: image?.revised_prompt || \"\",\n      metadata: {\n        model: \"dall-e-3\",\n        size: options?.size || \"1024x1024\",\n        quality: options?.quality || \"standard\",\n      },\n    };\n  }\n\n  /**\n   * Transcribe audio\n   */\n  override async transcribeAudio(\n    audio: Blob,\n    options?: TranscriptionOptions\n  ): Promise<TranscriptionResult> {\n    // Convert Blob to File\n    const file = new File([audio], \"audio.webm\", { type: audio.type });\n\n    const transcription = await this.client.audio.transcriptions.create({\n      file,\n      model: \"whisper-1\",\n      language: options?.language,\n      response_format: options?.format === \"json\" ? \"verbose_json\" : \"text\",\n      timestamp_granularities: options?.timestamps ? [\"word\"] : undefined,\n    });\n\n    if (typeof transcription === \"string\") {\n      return {\n        text: transcription,\n        language: options?.language,\n      };\n    }\n\n    return {\n      text: transcription.text,\n      language: (transcription as any).language,\n      duration: (transcription as any).duration,\n      words: (transcription as any).words?.map((w: any) => ({\n        word: w.word,\n        start: w.start,\n        end: w.end,\n      })),\n    };\n  }\n\n  /**\n   * Generate speech\n   */\n  override async generateSpeech(\n    text: string,\n    options?: SpeechOptions\n  ): Promise<Blob> {\n    const response = await this.client.audio.speech.create({\n      model: \"tts-1\",\n      input: text,\n      voice: (options?.voice || \"alloy\") as any,\n      speed: options?.speed || 1.0,\n      response_format: options?.format || (\"mp3\" as any),\n    });\n\n    // Convert response to Blob\n    const arrayBuffer = await response.arrayBuffer();\n    return new Blob([arrayBuffer], {\n      type: `audio/${options?.format || \"mp3\"}`,\n    });\n  }\n\n  /**\n   * Generate code\n   */\n  override async generateCode(\n    prompt: string,\n    options?: CodeGenerationOptions\n  ): Promise<CodeResult> {\n    const systemPrompt = `You are an expert programmer. Generate clean, efficient, and well-documented code.\n${options?.includeComments ? \"Include helpful comments.\" : \"Minimize comments.\"}\n${options?.includeTests ? \"Include unit tests.\" : \"\"}\nStyle: ${options?.style || \"concise\"}`;\n\n    const fullPrompt = `Language: ${options?.language || \"auto-detect\"}\nFramework: ${options?.framework || \"none\"}\n\nTask: ${prompt}\n\nRespond with a JSON object containing:\n- code: the generated code\n- language: the programming language used\n- explanation: brief explanation of the code\n${options?.includeTests ? \"- tests: unit test code\" : \"\"}\n- dependencies: array of required dependencies`;\n\n    const response = await this.generateText(fullPrompt, {\n      systemPrompt,\n      temperature: 0.2,\n      maxTokens: 2000,\n      responseFormat: { type: \"json_object\" },\n    });\n\n    try {\n      return JSON.parse(response);\n    } catch {\n      // Fallback\n      return {\n        code: response,\n        language: options?.language || \"unknown\",\n        explanation: \"Generated code\",\n      };\n    }\n  }\n\n  /**\n   * Explain code\n   */\n  override async explainCode(code: string, language?: string): Promise<string> {\n    const prompt = `Explain the following ${language || \"code\"} in detail:\n\n\\`\\`\\`${language || \"\"}\n${code}\n\\`\\`\\`\n\nProvide a clear explanation of:\n1. What the code does\n2. How it works\n3. Any important concepts or patterns used\n4. Potential improvements or issues`;\n\n    return this.generateText(prompt, {\n      temperature: 0.3,\n      maxTokens: 1000,\n    });\n  }\n\n  // /**\n  //  * Calculate token usage from OpenAI response\n  //  */\n  // private _extractTokenUsage(usage: any): TokenUsage {\n  //   return {\n  //     promptTokens: usage?.prompt_tokens || 0,\n  //     completionTokens: usage?.completion_tokens || 0,\n  //     totalTokens: usage?.total_tokens || 0,\n  //   };\n  // }\n}\n"]}