{"version":3,"sources":["../src/providers/factory.ts"],"names":[],"mappings":"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","file":"chunk-LLO6BCGP.cjs","sourcesContent":["/**\n * Model factory — hybrid Strands-native + Vercel AI SDK bridge.\n *\n * Native Strands models are used where they work cleanly in the browser:\n *   - anthropic → AnthropicModel (dangerouslyAllowBrowser)\n *   - openai    → OpenAIModel    (dangerouslyAllowBrowser)\n *   - google    → GoogleModel    (browser-friendly by default)\n *\n * Everything else — including Bedrock with bearer-token auth — goes\n * through VercelModel wrapping the corresponding @ai-sdk/<provider>.\n * This unlocks ~8 extra providers without writing any glue:\n *   - bedrock    → @ai-sdk/amazon-bedrock (bearer token, no SigV4)\n *   - openrouter → @openrouter/ai-sdk-provider (300+ models behind 1 key)\n *   - groq, mistral, deepseek, cohere, perplexity, xai → their @ai-sdk/* pkgs\n *   - webllm     → VercelModel + @browser-ai/web-llm (on-device)\n *\n * Why hybrid? Native models have slightly richer event shapes (reasoning,\n * cache deltas, citations) that don't round-trip through LanguageModelV3\n * cleanly yet. For the providers where that matters (Anthropic / OpenAI /\n * Google direct) we stay native; for the rest VercelModel is excellent.\n *\n * See:\n *   - https://github.com/strands-agents/sdk-typescript/tree/main/packages/sdk/src/models\n *   - https://sdk.vercel.ai/providers/ai-sdk-providers\n */\nimport type { Settings } from '../types/index'\n\nexport async function createModel(settings: Settings): Promise<any> {\n  const { provider, model, apiKey } = settings\n  const maxTokens = settings.maxTokens\n  const params: Record<string, unknown> = {}\n  if (typeof settings.temperature === 'number') params.temperature = settings.temperature\n  if (typeof settings.topP === 'number') params.top_p = settings.topP\n  if (settings.stopSequences?.length) params.stop_sequences = settings.stopSequences\n\n  switch (provider) {\n    /* ── Native Strands models (richest event shapes) ─────────────── */\n\n    case 'anthropic': {\n      const { AnthropicModel } = await import('@strands-agents/sdk/models/anthropic')\n      return new AnthropicModel({\n        apiKey,\n        modelId: model || 'claude-opus-4-7',\n        ...(typeof maxTokens === 'number' ? { maxTokens } : {}),\n        ...(Object.keys(params).length ? { params } : {}),\n        clientConfig: { dangerouslyAllowBrowser: true },\n      })\n    }\n\n    case 'openai': {\n      const { OpenAIModel } = await import('@strands-agents/sdk/models/openai')\n      return new OpenAIModel({\n        api: 'chat',\n        apiKey,\n        modelId: model || 'gpt-5.5-2026-04-23',\n        ...(typeof maxTokens === 'number' ? { maxTokens } : {}),\n        ...(Object.keys(params).length ? { params } : {}),\n        clientConfig: { dangerouslyAllowBrowser: true },\n      } as any)\n    }\n\n    case 'google': {\n      const { GoogleModel } = await import('@strands-agents/sdk/models/google')\n      return new GoogleModel({\n        apiKey,\n        modelId: model || 'gemini-2.5-flash',\n        ...(typeof maxTokens === 'number' ? { maxTokens } : {}),\n        ...(Object.keys(params).length ? { params } : {}),\n      })\n    }\n\n    /* ── Vercel AI SDK bridges ────────────────────────────────────── */\n\n    case 'bedrock': {\n      // @ai-sdk/amazon-bedrock has first-class bearer-token auth via apiKey,\n      // bypassing SigV4 entirely (browser-safe).\n      // https://sdk.vercel.ai/providers/ai-sdk-providers/amazon-bedrock\n      if (!apiKey) throw new Error('Bedrock API key is missing. Add it in Settings → Model.')\n      const [{ createAmazonBedrock }, { VercelModel }] = await Promise.all([\n        import('@ai-sdk/amazon-bedrock'),\n        import('@strands-agents/sdk/models/vercel'),\n      ])\n      const bedrock = createAmazonBedrock({\n        apiKey,\n        region: settings.bedrockRegion || 'us-west-2',\n      })\n      const lm = bedrock(model || 'global.anthropic.claude-opus-4-7')\n      return new VercelModel({\n        provider: lm,\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n        ...(typeof settings.temperature === 'number' ? { temperature: settings.temperature } : {}),\n        ...(typeof settings.topP === 'number' ? { topP: settings.topP } : {}),\n        ...(settings.stopSequences?.length ? { stopSequences: settings.stopSequences } : {}),\n      } as any)\n    }\n\n    case 'openrouter': {\n      // 300+ models (Claude, GPT, Llama, Mixtral, Qwen, DeepSeek, etc.) through 1 key.\n      // https://openrouter.ai/docs\n      if (!apiKey) throw new Error('OpenRouter API key is missing.')\n      const [{ createOpenRouter }, { VercelModel }] = await Promise.all([\n        import('@openrouter/ai-sdk-provider'),\n        import('@strands-agents/sdk/models/vercel'),\n      ])\n      const openrouter = createOpenRouter({ apiKey })\n      const lm = openrouter(model || 'anthropic/claude-opus-4.7')\n      return new VercelModel({\n        provider: lm,\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n        ...(typeof settings.temperature === 'number' ? { temperature: settings.temperature } : {}),\n        ...(typeof settings.topP === 'number' ? { topP: settings.topP } : {}),\n      } as any)\n    }\n\n    case 'groq': {\n      if (!apiKey) throw new Error('Groq API key is missing.')\n      const [{ createGroq }, { VercelModel }] = await Promise.all([\n        import('@ai-sdk/groq'),\n        import('@strands-agents/sdk/models/vercel'),\n      ])\n      const groq = createGroq({ apiKey })\n      return new VercelModel({\n        provider: groq(model || 'llama-3.3-70b-versatile'),\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n        ...(typeof settings.temperature === 'number' ? { temperature: settings.temperature } : {}),\n      } as any)\n    }\n\n    case 'mistral': {\n      if (!apiKey) throw new Error('Mistral API key is missing.')\n      const [{ createMistral }, { VercelModel }] = await Promise.all([\n        import('@ai-sdk/mistral'),\n        import('@strands-agents/sdk/models/vercel'),\n      ])\n      const mistral = createMistral({ apiKey })\n      return new VercelModel({\n        provider: mistral(model || 'mistral-large-latest'),\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n        ...(typeof settings.temperature === 'number' ? { temperature: settings.temperature } : {}),\n      } as any)\n    }\n\n    case 'deepseek': {\n      if (!apiKey) throw new Error('DeepSeek API key is missing.')\n      const [{ createDeepSeek }, { VercelModel }] = await Promise.all([\n        import('@ai-sdk/deepseek'),\n        import('@strands-agents/sdk/models/vercel'),\n      ])\n      const deepseek = createDeepSeek({ apiKey })\n      return new VercelModel({\n        provider: deepseek(model || 'deepseek-chat'),\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n        ...(typeof settings.temperature === 'number' ? { temperature: settings.temperature } : {}),\n      } as any)\n    }\n\n    case 'cohere': {\n      if (!apiKey) throw new Error('Cohere API key is missing.')\n      const [{ createCohere }, { VercelModel }] = await Promise.all([\n        import('@ai-sdk/cohere'),\n        import('@strands-agents/sdk/models/vercel'),\n      ])\n      const cohere = createCohere({ apiKey })\n      return new VercelModel({\n        provider: cohere(model || 'command-r-plus'),\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n        ...(typeof settings.temperature === 'number' ? { temperature: settings.temperature } : {}),\n      } as any)\n    }\n\n    case 'perplexity': {\n      if (!apiKey) throw new Error('Perplexity API key is missing.')\n      const [{ createPerplexity }, { VercelModel }] = await Promise.all([\n        import('@ai-sdk/perplexity'),\n        import('@strands-agents/sdk/models/vercel'),\n      ])\n      const pplx = createPerplexity({ apiKey })\n      return new VercelModel({\n        provider: pplx(model || 'sonar-pro'),\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n        ...(typeof settings.temperature === 'number' ? { temperature: settings.temperature } : {}),\n      } as any)\n    }\n\n    case 'xai': {\n      if (!apiKey) throw new Error('xAI API key is missing.')\n      const [{ createXai }, { VercelModel }] = await Promise.all([\n        import('@ai-sdk/xai'),\n        import('@strands-agents/sdk/models/vercel'),\n      ])\n      const xai = createXai({ apiKey })\n      return new VercelModel({\n        provider: xai(model || 'grok-2-latest'),\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n        ...(typeof settings.temperature === 'number' ? { temperature: settings.temperature } : {}),\n      } as any)\n    }\n\n    case 'webllm': {\n      // 100% local via WebGPU\n      const [{ VercelModel }, { createWebLLM, doesBrowserSupportWebLLM }] = await Promise.all([\n        import('@strands-agents/sdk/models/vercel'),\n        import('@browser-ai/web-llm'),\n      ])\n      if (!doesBrowserSupportWebLLM()) {\n        throw new Error('WebLLM requires WebGPU. Try Chrome/Edge on desktop.')\n      }\n      const client = createWebLLM()\n      const lm = client(model || 'Qwen2.5-0.5B-Instruct-q4f16_1-MLC')\n      return new VercelModel({\n        provider: lm,\n        ...(typeof maxTokens === 'number' ? { maxOutputTokens: maxTokens } : {}),\n      } as any)\n    }\n\n    default: {\n      // Fall back to anthropic — old behavior\n      const { AnthropicModel } = await import('@strands-agents/sdk/models/anthropic')\n      return new AnthropicModel({\n        apiKey,\n        modelId: model || 'claude-opus-4-7',\n        clientConfig: { dangerouslyAllowBrowser: true },\n      })\n    }\n  }\n}\n"]}