{"version":3,"sources":["../src/factory-cloudflare.ts","../src/factory-providers.ts","../src/factory.ts","../src/models-data.ts","../src/models-gemini.ts","../src/models-cloudflare.ts","../src/models.ts","../src/errors.ts","../src/retry.ts","../src/structured.ts","../src/streams.ts","../src/memory.ts","../src/streaming-handlers-groq.ts","../src/streaming-handlers-gemini.ts","../src/streaming-handlers.ts","../src/fluent-streaming.ts","../src/fluent-providers.ts","../src/fluent.ts"],"names":["MODELS","nagareStream"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Cloudflare Workers AI REST API\n *\n * Edge-native implementation for Cloudflare Workers AI via REST API.\n * Supports both standard and streaming responses.\n */\n\nimport type { Credentials } from \"./types.js\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface CloudflareRestResponse {\n  result: {\n    response: string;\n    output?: Array<{ type: string; role: string; content?: Array<{ text?: string }> }>;\n    usage?: {\n      prompt_tokens: number;\n      completion_tokens: number;\n      total_tokens: number;\n    };\n  };\n  success: boolean;\n  errors: unknown[];\n  messages: unknown[];\n}\n\n// =============================================================================\n// Cloudflare REST API\n// =============================================================================\n\nfunction validateCloudflareCredentials(credentials: Credentials) {\n  const { cloudflareApiKey, cloudflareEmail, cloudflareAccountId } = credentials;\n  if (!cloudflareApiKey || !cloudflareEmail || !cloudflareAccountId) {\n    throw new Error(\"Cloudflare REST API requires cloudflareApiKey, cloudflareEmail, and cloudflareAccountId\");\n  }\n  return { cloudflareApiKey, cloudflareEmail, cloudflareAccountId };\n}\n\nfunction buildRequestBody(model: string, messages: Array<{ role: string; content: string }>, stream = false): Record<string, unknown> {\n  if (model.includes(\"gpt-oss\")) {\n    const userMessage = messages.find(m => m.role === \"user\")?.content || \"\";\n    const systemMessage = messages.find(m => m.role === \"system\")?.content || \"\";\n    return {\n      input: userMessage,\n      ...(stream && { stream: true }),\n      ...(systemMessage && { instructions: systemMessage })\n    };\n  }\n  return {\n    messages,\n    ...(stream && { stream: true }),\n    ...(stream && model.includes('qwen') && { max_tokens: 1024 })\n  };\n}\n\n/**\n * Call Cloudflare Workers AI via REST API\n */\nexport async function callCloudflareRest(\n  model: string,\n  messages: Array<{ role: string; content: string }>,\n  credentials: Credentials\n): Promise<CloudflareRestResponse> {\n  const { cloudflareApiKey, cloudflareEmail, cloudflareAccountId } = validateCloudflareCredentials(credentials);\n  const requestBody = buildRequestBody(model, messages);\n\n  const response = await fetch(\n    `https://api.cloudflare.com/client/v4/accounts/${cloudflareAccountId}/ai/run/${model}`,\n    {\n      method: \"POST\",\n      headers: {\n        \"X-Auth-Email\": cloudflareEmail,\n        \"X-Auth-Key\": cloudflareApiKey,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(requestBody),\n    }\n  );\n\n  if (!response.ok) {\n    const text = await response.text();\n    throw new Error(`Cloudflare API error: ${response.status} ${text}`);\n  }\n\n  return response.json();\n}\n\n/**\n * Parse SSE lines and extract response chunks\n */\nfunction* parseSSELines(lines: string[]): Generator<string> {\n  for (const line of lines) {\n    const trimmed = line.trim();\n    if (!trimmed || !trimmed.startsWith(\"data: \")) continue;\n    const data = trimmed.slice(6);\n    if (data === \"[DONE]\") return;\n    try {\n      const parsed = JSON.parse(data);\n      if (parsed.response !== undefined && parsed.response !== \"\") {\n        yield parsed.response;\n      }\n    } catch { /* skip malformed JSON */ }\n  }\n}\n\n/**\n * Call Cloudflare Workers AI via REST API with streaming\n */\nexport async function* callCloudflareRestStream(\n  model: string,\n  messages: Array<{ role: string; content: string }>,\n  credentials: Credentials\n): AsyncGenerator<string, void, unknown> {\n  const { cloudflareApiKey, cloudflareEmail, cloudflareAccountId } = validateCloudflareCredentials(credentials);\n\n  const response = await fetch(\n    `https://api.cloudflare.com/client/v4/accounts/${cloudflareAccountId}/ai/run/${model}`,\n    {\n      method: \"POST\",\n      headers: {\n        \"X-Auth-Email\": cloudflareEmail,\n        \"X-Auth-Key\": cloudflareApiKey,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(buildRequestBody(model, messages, true)),\n    }\n  );\n\n  if (!response.ok) {\n    const text = await response.text();\n    throw new Error(`Cloudflare API error: ${response.status} ${text}`);\n  }\n\n  if (!response.body) throw new Error(\"No response body for streaming\");\n\n  const reader = response.body.getReader();\n  const decoder = new TextDecoder();\n  let buffer = \"\";\n\n  while (true) {\n    const { done, value } = await reader.read();\n    if (done) break;\n    buffer += decoder.decode(value, { stream: true });\n    const lines = buffer.split(\"\\n\");\n    buffer = lines.pop() ?? \"\";\n    yield* parseSSELines(lines);\n  }\n}\n\n/**\n * Extract response text from gpt-oss format\n */\nexport function extractGptOssResponse(result: CloudflareRestResponse): string {\n  if (result.result?.output) {\n    const assistantMessage = result.result.output.find(\n      (o) => o.type === \"message\" && o.role === \"assistant\"\n    );\n    return assistantMessage?.content?.[0]?.text || \"\";\n  }\n  return result.result?.response || \"\";\n}\n","/**\n * Provider-Specific Factory Functions\n *\n * Edge-native implementations for each LLM provider's API.\n * Each function uses pure fetch API with no external dependencies.\n */\n\n// =============================================================================\n// Response Types\n// =============================================================================\n\ninterface ProviderResponse {\n  text: string;\n  usage?: { promptTokens: number; completionTokens: number };\n}\n\ninterface AnthropicApiResponse {\n  content?: Array<{ text?: string }>;\n  usage?: { input_tokens: number; output_tokens: number };\n}\n\ninterface OpenAIApiResponse {\n  choices?: Array<{ message?: { content?: string } }>;\n  usage?: { prompt_tokens: number; completion_tokens: number };\n}\n\ninterface GeminiApiResponse {\n  candidates?: Array<{ content?: { parts?: Array<{ text?: string }> } }>;\n  usageMetadata?: { promptTokenCount: number; candidatesTokenCount: number };\n}\n\n// =============================================================================\n// Anthropic\n// =============================================================================\n\nexport async function generateWithAnthropic(\n  model: string,\n  messages: Array<{ role: string; content: string }>,\n  apiKey: string,\n  options: { temperature?: number; maxTokens?: number } = {}\n): Promise<ProviderResponse> {\n  const anthropicMessages = messages.map(msg => ({\n    role: msg.role === \"user\" ? \"user\" : \"assistant\",\n    content: msg.content,\n  }));\n\n  const systemIndex = messages.findIndex(m => m.role === \"system\");\n  const system = systemIndex >= 0 ? messages[systemIndex].content : undefined;\n  const finalMessages = systemIndex >= 0\n    ? anthropicMessages.filter((_, i) => i !== systemIndex)\n    : anthropicMessages;\n\n  const response = await fetch(\"https://api.anthropic.com/v1/messages\", {\n    method: \"POST\",\n    headers: {\n      \"x-api-key\": apiKey,\n      \"anthropic-version\": \"2023-06-01\",\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify({\n      model, messages: finalMessages, system,\n      max_tokens: options.maxTokens || 4096,\n      temperature: options.temperature || 0.7,\n    }),\n  });\n\n  if (!response.ok) {\n    const text = await response.text();\n    throw new Error(`Anthropic API error: ${response.status} ${text}`);\n  }\n\n  const result = await response.json() as AnthropicApiResponse;\n  return {\n    text: result.content?.[0]?.text || \"\",\n    usage: result.usage ? {\n      promptTokens: result.usage.input_tokens,\n      completionTokens: result.usage.output_tokens,\n    } : undefined,\n  };\n}\n\n// =============================================================================\n// OpenAI\n// =============================================================================\n\nexport async function generateWithOpenAI(\n  model: string,\n  messages: Array<{ role: string; content: string }>,\n  apiKey: string,\n  options: { temperature?: number; maxTokens?: number } = {}\n): Promise<ProviderResponse> {\n  const response = await fetch(\"https://api.openai.com/v1/chat/completions\", {\n    method: \"POST\",\n    headers: {\n      \"Authorization\": `Bearer ${apiKey}`,\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify({\n      model, messages,\n      temperature: options.temperature || 0.7,\n      max_tokens: options.maxTokens,\n    }),\n  });\n\n  if (!response.ok) {\n    const text = await response.text();\n    throw new Error(`OpenAI API error: ${response.status} ${text}`);\n  }\n\n  const result = await response.json() as OpenAIApiResponse;\n  return {\n    text: result.choices?.[0]?.message?.content || \"\",\n    usage: result.usage ? {\n      promptTokens: result.usage.prompt_tokens,\n      completionTokens: result.usage.completion_tokens,\n    } : undefined,\n  };\n}\n\n// =============================================================================\n// Groq\n// =============================================================================\n\nexport async function generateWithGroq(\n  model: string,\n  messages: Array<{ role: string; content: string }>,\n  apiKey: string,\n  options: { temperature?: number; maxTokens?: number } = {}\n): Promise<ProviderResponse> {\n  const response = await fetch(\"https://api.groq.com/openai/v1/chat/completions\", {\n    method: \"POST\",\n    headers: {\n      \"Authorization\": `Bearer ${apiKey}`,\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify({\n      model, messages,\n      temperature: options.temperature || 0.7,\n      max_tokens: options.maxTokens,\n    }),\n  });\n\n  if (!response.ok) {\n    const text = await response.text();\n    throw new Error(`Groq API error: ${response.status} ${text}`);\n  }\n\n  const result = await response.json() as OpenAIApiResponse;\n  return {\n    text: result.choices?.[0]?.message?.content || \"\",\n    usage: result.usage ? {\n      promptTokens: result.usage.prompt_tokens,\n      completionTokens: result.usage.completion_tokens,\n    } : undefined,\n  };\n}\n\n// =============================================================================\n// Gemini\n// =============================================================================\n\nexport async function generateWithGemini(\n  model: string,\n  messages: Array<{ role: string; content: string }>,\n  apiKey: string,\n  options: { temperature?: number; maxTokens?: number } = {}\n): Promise<ProviderResponse> {\n  const contents = messages\n    .filter(m => m.role !== \"system\")\n    .map(m => ({\n      role: m.role === \"assistant\" ? \"model\" : \"user\",\n      parts: [{ text: m.content }],\n    }));\n\n  const systemInstruction = messages.find(m => m.role === \"system\")?.content;\n\n  const response = await fetch(\n    `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`,\n    {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        contents,\n        ...(systemInstruction && { systemInstruction: { parts: [{ text: systemInstruction }] } }),\n        generationConfig: {\n          temperature: options.temperature || 0.7,\n          maxOutputTokens: options.maxTokens,\n        },\n      }),\n    }\n  );\n\n  if (!response.ok) {\n    const text = await response.text();\n    throw new Error(`Gemini API error: ${response.status} ${text}`);\n  }\n\n  const result = await response.json() as GeminiApiResponse;\n  return {\n    text: result.candidates?.[0]?.content?.parts?.[0]?.text || \"\",\n    usage: result.usageMetadata ? {\n      promptTokens: result.usageMetadata.promptTokenCount,\n      completionTokens: result.usageMetadata.candidatesTokenCount,\n    } : undefined,\n  };\n}\n\n// Re-export Cloudflare functions\nexport {\n  callCloudflareRest,\n  callCloudflareRestStream,\n  extractGptOssResponse,\n} from \"./factory-cloudflare.js\";\n\nexport type { CloudflareRestResponse } from \"./factory-cloudflare.js\";\n","/**\n * Edge-Native Provider Factory\n *\n * Core factory function and utilities for routing to provider-specific\n * implementations. Pure fetch API - no external dependencies.\n */\n\nimport type {\n  ModelSpec,\n  ParsedModelSpec,\n  ProviderType,\n  Credentials,\n} from \"./types.js\";\nimport {\n  generateWithAnthropic,\n  generateWithOpenAI,\n  generateWithGroq,\n  generateWithGemini,\n  callCloudflareRest,\n  extractGptOssResponse,\n} from \"./factory-providers.js\";\n\n// Re-export provider functions for backward compatibility\nexport {\n  generateWithAnthropic,\n  generateWithOpenAI,\n  generateWithGroq,\n  generateWithGemini,\n  callCloudflareRest,\n  callCloudflareRestStream,\n} from \"./factory-providers.js\";\n\nexport type { CloudflareRestResponse } from \"./factory-providers.js\";\n\n// =============================================================================\n// Core API\n// =============================================================================\n\n/**\n * Parse a ModelSpec string into its components\n */\nexport function parseModelSpec(spec: string): ParsedModelSpec {\n  const colonIndex = spec.indexOf(\":\");\n  if (colonIndex === -1) {\n    throw new Error(`Invalid ModelSpec: \"${spec}\". Expected format: \"provider:model\"`);\n  }\n\n  const provider = spec.slice(0, colonIndex) as ProviderType;\n  const model = spec.slice(colonIndex + 1);\n\n  if (![\"anthropic\", \"openai\", \"groq\", \"gemini\", \"cloudflare\"].includes(provider)) {\n    throw new Error(`Unknown provider: \"${provider}\". Expected: anthropic, openai, groq, gemini, or cloudflare`);\n  }\n\n  if (!model) {\n    throw new Error(`Model ID is required in spec: \"${spec}\"`);\n  }\n\n  return {\n    provider,\n    model,\n    spec: spec as ModelSpec,\n  };\n}\n\n/**\n * Create a model spec string\n */\nexport function createModelSpec(provider: ProviderType, model: string): ModelSpec {\n  return `${provider}:${model}` as ModelSpec;\n}\n\n// =============================================================================\n// Edge-Native Generation\n// =============================================================================\n\ntype GenerateFn = (model: string, messages: Array<{ role: string; content: string }>, apiKey: string, options: { temperature?: number; maxTokens?: number }) => Promise<{ text: string; usage?: { promptTokens: number; completionTokens: number } }>;\n\nconst PROVIDER_GENERATORS: Record<string, { keyField: keyof Credentials; fn: GenerateFn }> = {\n  anthropic: { keyField: \"anthropicApiKey\", fn: generateWithAnthropic },\n  openai: { keyField: \"openaiApiKey\", fn: generateWithOpenAI },\n  groq: { keyField: \"groqApiKey\", fn: generateWithGroq },\n  gemini: { keyField: \"geminiApiKey\", fn: generateWithGemini },\n};\n\nasync function generateWithCloudflare(\n  model: string,\n  messages: Array<{ role: string; content: string }>,\n  credentials: Credentials\n): Promise<{ text: string; usage?: { promptTokens: number; completionTokens: number } }> {\n  if (!credentials.cloudflareApiKey || !credentials.cloudflareEmail || !credentials.cloudflareAccountId) {\n    throw new Error(\"Cloudflare models require cloudflareApiKey, cloudflareEmail, and cloudflareAccountId\");\n  }\n  const result = await callCloudflareRest(model, messages, credentials);\n  return {\n    text: result.result.response || extractGptOssResponse(result),\n    usage: result.result.usage ? {\n      promptTokens: result.result.usage.prompt_tokens,\n      completionTokens: result.result.usage.completion_tokens,\n    } : undefined,\n  };\n}\n\n/**\n * Generate text using any supported provider (edge-native)\n */\nexport async function generate(\n  spec: ModelSpec | string,\n  messages: Array<{ role: string; content: string }>,\n  credentials: Credentials,\n  options: { temperature?: number; maxTokens?: number } = {}\n): Promise<{ text: string; usage?: { promptTokens: number; completionTokens: number } }> {\n  const { provider, model } = parseModelSpec(spec);\n\n  if (provider === \"cloudflare\") {\n    return generateWithCloudflare(model, messages, credentials);\n  }\n\n  const config = PROVIDER_GENERATORS[provider];\n  if (!config) throw new Error(`Unknown provider: ${provider}`);\n\n  const apiKey = credentials[config.keyField];\n  if (!apiKey) throw new Error(`${config.keyField} is required for ${provider} models`);\n\n  return config.fn(model, messages, apiKey, options);\n}\n\n// =============================================================================\n// Convenience Functions\n// =============================================================================\n\n/**\n * Check if credentials are available for a provider\n */\nexport function hasCredentials(provider: ProviderType, credentials: Credentials): boolean {\n  switch (provider) {\n    case \"anthropic\":\n      return !!credentials.anthropicApiKey;\n    case \"openai\":\n      return !!credentials.openaiApiKey;\n    case \"groq\":\n      return !!credentials.groqApiKey;\n    case \"gemini\":\n      return !!credentials.geminiApiKey;\n    case \"cloudflare\":\n      return !!(credentials.cloudflareApiKey && credentials.cloudflareEmail && credentials.cloudflareAccountId);\n  }\n}\n\n/**\n * Get credentials from environment variables\n */\nexport function getCredentialsFromEnv(): Credentials {\n  return {\n    anthropicApiKey: process.env.ANTHROPIC_API_KEY,\n    openaiApiKey: process.env.OPENAI_API_KEY,\n    groqApiKey: process.env.GROQ_API_KEY,\n    geminiApiKey: process.env.GEMINI_API_KEY,\n    cloudflareApiKey: process.env.CLOUDFLARE_API_KEY,\n    cloudflareEmail: process.env.CLOUDFLARE_EMAIL,\n    cloudflareAccountId: process.env.CLOUDFLARE_ACCOUNT_ID,\n  };\n}\n","/**\n * Model Data Definitions\n *\n * All available models with metadata, indexed by ModelSpec.\n * Verified working as of 2025-12-17, updated 2025-01-15.\n */\n\nimport type { ModelSpec, ModelInfo } from \"./types.js\";\n\n/**\n * All available models with metadata\n */\nexport const MODELS: ModelInfo[] = [\n  // Anthropic models (verified 2025-12-26)\n  {\n    spec: \"anthropic:claude-opus-4-5-20251101\",\n    provider: \"anthropic\",\n    model: \"claude-opus-4-5-20251101\",\n    name: \"Claude Opus 4.5 (Most Intelligent)\",\n    contextWindow: 200000,\n    speed: \"slow\",\n    cost: \"high\",\n  },\n  {\n    spec: \"anthropic:claude-haiku-4-5-20251001\",\n    provider: \"anthropic\",\n    model: \"claude-haiku-4-5-20251001\",\n    name: \"Claude Haiku 4.5 (Ultra Fast)\",\n    contextWindow: 200000,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n  {\n    spec: \"anthropic:claude-sonnet-4-5-20250929\",\n    provider: \"anthropic\",\n    model: \"claude-sonnet-4-5-20250929\",\n    name: \"Claude Sonnet 4.5 (Best for Coding)\",\n    contextWindow: 200000,\n    speed: \"fast\",\n    cost: \"medium\",\n  },\n  {\n    spec: \"anthropic:claude-opus-4-1-20250805\",\n    provider: \"anthropic\",\n    model: \"claude-opus-4-1-20250805\",\n    name: \"Claude Opus 4.1\",\n    contextWindow: 200000,\n    speed: \"slow\",\n    cost: \"high\",\n  },\n  {\n    spec: \"anthropic:claude-opus-4-20250514\",\n    provider: \"anthropic\",\n    model: \"claude-opus-4-20250514\",\n    name: \"Claude Opus 4\",\n    contextWindow: 200000,\n    speed: \"slow\",\n    cost: \"high\",\n  },\n  {\n    spec: \"anthropic:claude-sonnet-4-20250514\",\n    provider: \"anthropic\",\n    model: \"claude-sonnet-4-20250514\",\n    name: \"Claude Sonnet 4\",\n    contextWindow: 200000,\n    speed: \"fast\",\n    cost: \"medium\",\n  },\n  {\n    spec: \"anthropic:claude-3-5-haiku-20241022\",\n    provider: \"anthropic\",\n    model: \"claude-3-5-haiku-20241022\",\n    name: \"Claude 3.5 Haiku\",\n    contextWindow: 200000,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n  {\n    spec: \"anthropic:claude-3-haiku-20240307\",\n    provider: \"anthropic\",\n    model: \"claude-3-haiku-20240307\",\n    name: \"Claude 3 Haiku\",\n    contextWindow: 200000,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n\n  // OpenAI models (verified 2025-12-26)\n  {\n    spec: \"openai:gpt-4o\",\n    provider: \"openai\",\n    model: \"gpt-4o\",\n    name: \"GPT-4o (Latest)\",\n    contextWindow: 128000,\n    speed: \"fast\",\n    cost: \"high\",\n  },\n  {\n    spec: \"openai:gpt-4o-mini\",\n    provider: \"openai\",\n    model: \"gpt-4o-mini\",\n    name: \"GPT-4o Mini\",\n    contextWindow: 128000,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n  {\n    spec: \"openai:gpt-4o-2024-11-20\",\n    provider: \"openai\",\n    model: \"gpt-4o-2024-11-20\",\n    name: \"GPT-4o (2024-11-20)\",\n    contextWindow: 128000,\n    speed: \"fast\",\n    cost: \"high\",\n  },\n  {\n    spec: \"openai:gpt-4o-2024-08-06\",\n    provider: \"openai\",\n    model: \"gpt-4o-2024-08-06\",\n    name: \"GPT-4o (2024-08-06)\",\n    contextWindow: 128000,\n    speed: \"fast\",\n    cost: \"high\",\n  },\n  {\n    spec: \"openai:gpt-4-turbo\",\n    provider: \"openai\",\n    model: \"gpt-4-turbo\",\n    name: \"GPT-4 Turbo\",\n    contextWindow: 128000,\n    speed: \"medium\",\n    cost: \"high\",\n  },\n  {\n    spec: \"openai:gpt-4-turbo-preview\",\n    provider: \"openai\",\n    model: \"gpt-4-turbo-preview\",\n    name: \"GPT-4 Turbo Preview\",\n    contextWindow: 128000,\n    speed: \"medium\",\n    cost: \"high\",\n  },\n  {\n    spec: \"openai:gpt-4\",\n    provider: \"openai\",\n    model: \"gpt-4\",\n    name: \"GPT-4\",\n    contextWindow: 8192,\n    speed: \"slow\",\n    cost: \"high\",\n  },\n  {\n    spec: \"openai:gpt-3.5-turbo\",\n    provider: \"openai\",\n    model: \"gpt-3.5-turbo\",\n    name: \"GPT-3.5 Turbo\",\n    contextWindow: 16385,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n  {\n    spec: \"openai:gpt-3.5-turbo-0125\",\n    provider: \"openai\",\n    model: \"gpt-3.5-turbo-0125\",\n    name: \"GPT-3.5 Turbo (0125)\",\n    contextWindow: 16385,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n\n  // Groq models (verified 2025-01-15)\n  {\n    spec: \"groq:llama-3.1-8b-instant\",\n    provider: \"groq\",\n    model: \"llama-3.1-8b-instant\",\n    name: \"Llama 3.1 8B Instant\",\n    contextWindow: 131072,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n  {\n    spec: \"groq:llama-3.3-70b-versatile\",\n    provider: \"groq\",\n    model: \"llama-3.3-70b-versatile\",\n    name: \"Llama 3.3 70B Versatile\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"medium\",\n  },\n  {\n    spec: \"groq:meta-llama/llama-guard-4-12b\",\n    provider: \"groq\",\n    model: \"meta-llama/llama-guard-4-12b\",\n    name: \"Llama Guard 4 12B\",\n    contextWindow: 131072,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n  {\n    spec: \"groq:openai/gpt-oss-120b\",\n    provider: \"groq\",\n    model: \"openai/gpt-oss-120b\",\n    name: \"GPT-OSS 120B\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"low\",\n  },\n  {\n    spec: \"groq:openai/gpt-oss-20b\",\n    provider: \"groq\",\n    model: \"openai/gpt-oss-20b\",\n    name: \"GPT-OSS 20B\",\n    contextWindow: 131072,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n  {\n    spec: \"groq:groq/compound\",\n    provider: \"groq\",\n    model: \"groq/compound\",\n    name: \"Groq Compound (Web Search + Code)\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"medium\",\n  },\n  {\n    spec: \"groq:groq/compound-mini\",\n    provider: \"groq\",\n    model: \"groq/compound-mini\",\n    name: \"Groq Compound Mini (Web Search + Code)\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"low\",\n  },\n];\n","/**\n * Gemini Model Definitions\n *\n * Google Gemini model metadata for all supported versions.\n */\n\nimport type { ModelInfo } from \"./types.js\";\n\n/**\n * Gemini models (verified 2025-01-15)\n */\nexport const GEMINI_MODELS: ModelInfo[] = [\n  // Gemini 3 Series (Latest)\n  {\n    spec: \"gemini:gemini-3-pro-preview\",\n    provider: \"gemini\",\n    model: \"gemini-3-pro-preview\",\n    name: \"Gemini 3 Pro (Preview)\",\n    contextWindow: 1048576,\n    speed: \"slow\",\n    cost: \"high\",\n  },\n  {\n    spec: \"gemini:gemini-3-flash-preview\",\n    provider: \"gemini\",\n    model: \"gemini-3-flash-preview\",\n    name: \"Gemini 3 Flash (Preview)\",\n    contextWindow: 1048576,\n    speed: \"fast\",\n    cost: \"medium\",\n  },\n\n  // Gemini 2.5 Series\n  {\n    spec: \"gemini:gemini-2.5-pro\",\n    provider: \"gemini\",\n    model: \"gemini-2.5-pro\",\n    name: \"Gemini 2.5 Pro\",\n    contextWindow: 1048576,\n    speed: \"slow\",\n    cost: \"high\",\n  },\n  {\n    spec: \"gemini:gemini-2.5-flash\",\n    provider: \"gemini\",\n    model: \"gemini-2.5-flash\",\n    name: \"Gemini 2.5 Flash\",\n    contextWindow: 1048576,\n    speed: \"fast\",\n    cost: \"medium\",\n  },\n\n  // Gemini 2.0 Series\n  {\n    spec: \"gemini:gemini-2.0-flash\",\n    provider: \"gemini\",\n    model: \"gemini-2.0-flash\",\n    name: \"Gemini 2.0 Flash\",\n    contextWindow: 1048576,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n  {\n    spec: \"gemini:gemini-2.0-flash-lite\",\n    provider: \"gemini\",\n    model: \"gemini-2.0-flash-lite\",\n    name: \"Gemini 2.0 Flash Lite\",\n    contextWindow: 1048576,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n\n  // Gemini 1.5 Series (Legacy but Active)\n  {\n    spec: \"gemini:gemini-1.5-pro-002\",\n    provider: \"gemini\",\n    model: \"gemini-1.5-pro-002\",\n    name: \"Gemini 1.5 Pro\",\n    contextWindow: 1048576,\n    speed: \"medium\",\n    cost: \"medium\",\n  },\n  {\n    spec: \"gemini:gemini-1.5-flash-002\",\n    provider: \"gemini\",\n    model: \"gemini-1.5-flash-002\",\n    name: \"Gemini 1.5 Flash\",\n    contextWindow: 1048576,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n];\n","/**\n * Cloudflare Workers AI Model Definitions\n *\n * Cloudflare Workers AI model metadata for all supported models.\n */\n\nimport type { ModelInfo } from \"./types.js\";\n\n/**\n * Cloudflare Workers AI models (verified 2025-01-15)\n */\nexport const CLOUDFLARE_MODELS: ModelInfo[] = [\n  // OpenAI Models\n  {\n    spec: \"cloudflare:@cf/openai/gpt-oss-120b\",\n    provider: \"cloudflare\",\n    model: \"@cf/openai/gpt-oss-120b\",\n    name: \"GPT-OSS 120B\",\n    contextWindow: 128000,\n    speed: \"medium\",\n    cost: \"medium\",\n  },\n  {\n    spec: \"cloudflare:@cf/openai/gpt-oss-20b\",\n    provider: \"cloudflare\",\n    model: \"@cf/openai/gpt-oss-20b\",\n    name: \"GPT-OSS 20B\",\n    contextWindow: 128000,\n    speed: \"fast\",\n    cost: \"low\",\n  },\n\n  // Meta Llama Models\n  {\n    spec: \"cloudflare:@cf/meta/llama-4-scout-17b-16e-instruct\",\n    provider: \"cloudflare\",\n    model: \"@cf/meta/llama-4-scout-17b-16e-instruct\",\n    name: \"Llama 4 Scout 17B (Multimodal)\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"free\",\n  },\n  {\n    spec: \"cloudflare:@cf/meta/llama-3.3-70b-instruct-fp8-fast\",\n    provider: \"cloudflare\",\n    model: \"@cf/meta/llama-3.3-70b-instruct-fp8-fast\",\n    name: \"Llama 3.3 70B (FP8 Fast)\",\n    contextWindow: 131072,\n    speed: \"fast\",\n    cost: \"free\",\n  },\n  {\n    spec: \"cloudflare:@cf/meta/llama-3.1-70b-instruct\",\n    provider: \"cloudflare\",\n    model: \"@cf/meta/llama-3.1-70b-instruct\",\n    name: \"Llama 3.1 70B Instruct\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"free\",\n  },\n  {\n    spec: \"cloudflare:@cf/meta/llama-3.1-8b-instruct-fast\",\n    provider: \"cloudflare\",\n    model: \"@cf/meta/llama-3.1-8b-instruct-fast\",\n    name: \"Llama 3.1 8B Instruct (Fast)\",\n    contextWindow: 131072,\n    speed: \"fast\",\n    cost: \"free\",\n  },\n  {\n    spec: \"cloudflare:@cf/meta/llama-3.1-8b-instruct\",\n    provider: \"cloudflare\",\n    model: \"@cf/meta/llama-3.1-8b-instruct\",\n    name: \"Llama 3.1 8B Instruct\",\n    contextWindow: 131072,\n    speed: \"fast\",\n    cost: \"free\",\n  },\n\n  // IBM Models\n  {\n    spec: \"cloudflare:@cf/ibm/granite-4.0-h-micro\",\n    provider: \"cloudflare\",\n    model: \"@cf/ibm/granite-4.0-h-micro\",\n    name: \"IBM Granite 4.0 H Micro\",\n    contextWindow: 131072,\n    speed: \"fast\",\n    cost: \"free\",\n  },\n\n  // MistralAI Models\n  {\n    spec: \"cloudflare:@cf/mistralai/mistral-small-3.1-24b-instruct\",\n    provider: \"cloudflare\",\n    model: \"@cf/mistralai/mistral-small-3.1-24b-instruct\",\n    name: \"Mistral Small 3.1 24B\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"free\",\n  },\n  {\n    spec: \"cloudflare:@cf/mistralai/mistral-7b-instruct-v0.2\",\n    provider: \"cloudflare\",\n    model: \"@cf/mistralai/mistral-7b-instruct-v0.2\",\n    name: \"Mistral 7B Instruct v0.2\",\n    contextWindow: 32768,\n    speed: \"fast\",\n    cost: \"free\",\n  },\n\n  // Google Models\n  {\n    spec: \"cloudflare:@cf/google/gemma-3-12b-it\",\n    provider: \"cloudflare\",\n    model: \"@cf/google/gemma-3-12b-it\",\n    name: \"Gemma 3 12B IT\",\n    contextWindow: 128000,\n    speed: \"fast\",\n    cost: \"free\",\n  },\n\n  // Qwen Models\n  {\n    spec: \"cloudflare:@cf/qwen/qwq-32b\",\n    provider: \"cloudflare\",\n    model: \"@cf/qwen/qwq-32b\",\n    name: \"QwQ 32B (Reasoning)\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"free\",\n  },\n  {\n    spec: \"cloudflare:@cf/qwen/qwen2.5-coder-32b-instruct\",\n    provider: \"cloudflare\",\n    model: \"@cf/qwen/qwen2.5-coder-32b-instruct\",\n    name: \"Qwen 2.5 Coder 32B\",\n    contextWindow: 131072,\n    speed: \"medium\",\n    cost: \"free\",\n  },\n];\n","/**\n * Model Registry and Utilities\n *\n * Aggregates model data from provider-specific files and provides\n * lookup, filtering, and query functions.\n */\n\nimport type { ModelSpec, ModelInfo, ProviderType, Credentials } from \"./types.js\";\nimport { MODELS as BASE_MODELS } from \"./models-data.js\";\nimport { GEMINI_MODELS } from \"./models-gemini.js\";\nimport { CLOUDFLARE_MODELS } from \"./models-cloudflare.js\";\n\n// =============================================================================\n// Aggregated Model List\n// =============================================================================\n\n/**\n * All available models with metadata\n */\nexport const MODELS: ModelInfo[] = [\n  ...BASE_MODELS,\n  ...GEMINI_MODELS,\n  ...CLOUDFLARE_MODELS,\n];\n\n// =============================================================================\n// Model Lookup\n// =============================================================================\n\n/**\n * Model lookup by spec\n */\nexport const MODEL_BY_SPEC: Record<string, ModelInfo> = Object.fromEntries(\n  MODELS.map((m) => [m.spec, m])\n);\n\n/**\n * Get model info by spec\n */\nexport function getModelInfo(spec: ModelSpec | string): ModelInfo | undefined {\n  return MODEL_BY_SPEC[spec];\n}\n\n/**\n * Get models by provider\n */\nexport function getModelsByProvider(provider: ProviderType): ModelInfo[] {\n  return MODELS.filter((m) => m.provider === provider);\n}\n\n/**\n * Get all model specs\n */\nexport function getAllSpecs(): ModelSpec[] {\n  return MODELS.map((m) => m.spec);\n}\n\n/**\n * Get recommended models (fast + low/free cost)\n */\nexport function getRecommendedModels(): ModelInfo[] {\n  return MODELS.filter(\n    (m) => m.speed === \"fast\" && (m.cost === \"free\" || m.cost === \"low\")\n  );\n}\n\n/**\n * Default model specs for each provider\n */\nexport const DEFAULT_SPECS: Record<ProviderType, ModelSpec> = {\n  anthropic: \"anthropic:claude-sonnet-4-5-20250929\",\n  openai: \"openai:gpt-4o-mini\",\n  groq: \"groq:llama-3.1-8b-instant\",\n  gemini: \"gemini:gemini-2.0-flash\",\n  cloudflare: \"cloudflare:@cf/meta/llama-3.3-70b-instruct-fp8-fast\",\n};\n\n/**\n * Check if a spec is valid\n */\nexport function isValidSpec(spec: string): spec is ModelSpec {\n  return spec in MODEL_BY_SPEC;\n}\n\n/**\n * Get available providers based on credentials\n */\nexport function getAvailableProviders(credentials: Credentials): ProviderType[] {\n  const providers: ProviderType[] = [];\n  if (credentials.anthropicApiKey) providers.push(\"anthropic\");\n  if (credentials.openaiApiKey) providers.push(\"openai\");\n  if (credentials.groqApiKey) providers.push(\"groq\");\n  if (credentials.geminiApiKey) providers.push(\"gemini\");\n  if (credentials.cloudflareAccountId) providers.push(\"cloudflare\");\n  return providers;\n}\n\n/**\n * Get available models based on credentials\n */\nexport function getAvailableModels(credentials: Credentials): ModelInfo[] {\n  const providers = getAvailableProviders(credentials);\n  return MODELS.filter((m) => providers.includes(m.provider));\n}\n","/**\n * Error Types for LLM Provider\n *\n * Unified error handling across all providers (Groq, Gemini, Cloudflare)\n */\n\nimport type { ProviderType } from \"./types.js\";\n\n/**\n * Error codes for categorization\n */\nexport type LLMErrorCode =\n  | \"RATE_LIMIT\"      // 429 - Too many requests\n  | \"AUTH\"            // 401/403 - Authentication/Authorization failed\n  | \"TIMEOUT\"         // Request timeout\n  | \"INVALID_RESPONSE\" // Invalid or unparseable response\n  | \"NETWORK\"         // Network connectivity issues\n  | \"SERVER_ERROR\"    // 500+ server errors\n  | \"VALIDATION\"      // Schema validation failed\n  | \"UNKNOWN\";        // Unknown error\n\n/**\n * Main error class for LLM provider errors\n */\nexport class LLMProviderError extends Error {\n  readonly code: LLMErrorCode;\n  readonly provider: ProviderType | \"unknown\";\n  readonly retryable: boolean;\n  readonly statusCode?: number;\n  readonly cause?: Error;\n\n  constructor(options: {\n    message: string;\n    code: LLMErrorCode;\n    provider?: ProviderType;\n    statusCode?: number;\n    retryable?: boolean;\n    cause?: Error;\n  }) {\n    super(options.message);\n    this.name = \"LLMProviderError\";\n    this.code = options.code;\n    this.provider = options.provider ?? \"unknown\";\n    this.statusCode = options.statusCode;\n    this.retryable = options.retryable ?? isRetryableCode(options.code);\n    this.cause = options.cause;\n\n    // Maintains proper stack trace for where our error was thrown (only in V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, LLMProviderError);\n    }\n  }\n\n  /**\n   * Create a user-friendly error message\n   */\n  toUserMessage(): string {\n    switch (this.code) {\n      case \"RATE_LIMIT\":\n        return \"Too many requests. Please wait a moment and try again.\";\n      case \"AUTH\":\n        return \"Authentication failed. Please check your API credentials.\";\n      case \"TIMEOUT\":\n        return \"Request timed out. Please try again.\";\n      case \"INVALID_RESPONSE\":\n        return \"Received an invalid response from the AI service.\";\n      case \"NETWORK\":\n        return \"Network error. Please check your connection.\";\n      case \"SERVER_ERROR\":\n        return \"The AI service is temporarily unavailable. Please try again later.\";\n      case \"VALIDATION\":\n        return \"The response did not match the expected format.\";\n      default:\n        return \"An unexpected error occurred.\";\n    }\n  }\n}\n\n/**\n * Determine if an error code is retryable by default\n */\nexport function isRetryableCode(code: LLMErrorCode): boolean {\n  switch (code) {\n    case \"RATE_LIMIT\":\n    case \"TIMEOUT\":\n    case \"NETWORK\":\n    case \"SERVER_ERROR\":\n      return true;\n    case \"AUTH\":\n    case \"INVALID_RESPONSE\":\n    case \"VALIDATION\":\n    case \"UNKNOWN\":\n      return false;\n  }\n}\n\n/**\n * Parse an HTTP status code to an error code\n */\nexport function statusToErrorCode(status: number): LLMErrorCode {\n  if (status === 429) return \"RATE_LIMIT\";\n  if (status === 401 || status === 403) return \"AUTH\";\n  if (status === 408) return \"TIMEOUT\";\n  if (status >= 500) return \"SERVER_ERROR\";\n  return \"UNKNOWN\";\n}\n\n/**\n * Detect error code from message content\n */\nfunction detectErrorCode(lowerMessage: string): { code: LLMErrorCode; statusCode?: number } {\n  const patterns: Array<{ keywords: string[]; code: LLMErrorCode; statusCode?: number }> = [\n    { keywords: [\"rate limit\", \"429\"], code: \"RATE_LIMIT\", statusCode: 429 },\n    { keywords: [\"timeout\", \"timed out\"], code: \"TIMEOUT\" },\n    { keywords: [\"unauthorized\", \"authentication\", \"api key\", \"401\", \"403\"], code: \"AUTH\" },\n    { keywords: [\"network\", \"econnrefused\", \"enotfound\", \"fetch failed\"], code: \"NETWORK\" },\n    { keywords: [\"500\", \"internal server\"], code: \"SERVER_ERROR\", statusCode: 500 },\n  ];\n  for (const pattern of patterns) {\n    if (pattern.keywords.some(k => lowerMessage.includes(k))) {\n      return { code: pattern.code, statusCode: pattern.statusCode };\n    }\n  }\n  return { code: \"UNKNOWN\" };\n}\n\n/**\n * Wrap any error into an LLMProviderError\n */\nexport function wrapError(\n  error: unknown,\n  provider?: ProviderType,\n  context?: string\n): LLMProviderError {\n  if (error instanceof LLMProviderError) {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    const message = context ? `${context}: ${error.message}` : error.message;\n    const detected = detectErrorCode(error.message.toLowerCase());\n    return new LLMProviderError({\n      message,\n      code: detected.code,\n      provider,\n      statusCode: detected.statusCode,\n      cause: error,\n    });\n  }\n\n  return new LLMProviderError({\n    message: context ? `${context}: ${String(error)}` : String(error),\n    code: \"UNKNOWN\",\n    provider,\n  });\n}\n\n/**\n * Check if an error is an LLMProviderError with a specific code\n */\nexport function isLLMError(\n  error: unknown,\n  code?: LLMErrorCode\n): error is LLMProviderError {\n  if (!(error instanceof LLMProviderError)) return false;\n  if (code === undefined) return true;\n  return error.code === code;\n}\n\n/**\n * Check if an error is retryable\n */\nexport function isRetryable(error: unknown): boolean {\n  if (error instanceof LLMProviderError) {\n    return error.retryable;\n  }\n  return false;\n}\n","/**\n * Retry Logic for LLM Provider\n *\n * Exponential backoff with jitter for handling transient errors\n */\n\nimport {\n  LLMProviderError,\n  LLMErrorCode,\n  wrapError,\n} from \"./errors.js\";\n\n/**\n * Configuration for retry behavior\n */\nexport interface RetryConfig {\n  /** Maximum number of retry attempts (default: 3) */\n  maxRetries?: number;\n  /** Base delay in milliseconds (default: 100) */\n  baseDelay?: number;\n  /** Maximum delay in milliseconds (default: 10000) */\n  maxDelay?: number;\n  /** Error codes to retry on (default: all retryable codes) */\n  retryOn?: LLMErrorCode[];\n  /** Callback when a retry occurs */\n  onRetry?: (attempt: number, error: LLMProviderError, delay: number) => void;\n  /** Custom delay calculator (overrides exponential backoff) */\n  delayFn?: (attempt: number, baseDelay: number) => number;\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: Required<Omit<RetryConfig, \"onRetry\" | \"delayFn\" | \"retryOn\">> = {\n  maxRetries: 3,\n  baseDelay: 100,\n  maxDelay: 10000,\n};\n\n/**\n * Default retryable error codes\n */\nexport const DEFAULT_RETRYABLE_CODES: LLMErrorCode[] = [\n  \"RATE_LIMIT\",\n  \"TIMEOUT\",\n  \"NETWORK\",\n  \"SERVER_ERROR\",\n];\n\n/**\n * Calculate delay with exponential backoff and jitter\n *\n * @param attempt - Current attempt number (0-indexed)\n * @param baseDelay - Base delay in milliseconds\n * @param maxDelay - Maximum delay cap\n * @returns Delay in milliseconds\n */\nexport function calculateDelay(\n  attempt: number,\n  baseDelay: number,\n  maxDelay: number\n): number {\n  // Exponential backoff: baseDelay * 2^attempt\n  const exponentialDelay = baseDelay * Math.pow(2, attempt);\n\n  // Add jitter (random factor between 0.5 and 1.5)\n  const jitter = 0.5 + Math.random();\n  const delayWithJitter = exponentialDelay * jitter;\n\n  // Cap at maxDelay\n  return Math.min(delayWithJitter, maxDelay);\n}\n\n/**\n * Sleep for a specified duration\n */\nexport function sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Execute a function with retry logic\n *\n * @example\n * ```typescript\n * const result = await withRetry(\n *   () => generateText({ model, prompt }),\n *   {\n *     maxRetries: 3,\n *     baseDelay: 100,\n *     retryOn: ['RATE_LIMIT', 'TIMEOUT'],\n *     onRetry: (attempt, error) => console.log(`Retry ${attempt}...`),\n *   }\n * );\n * ```\n */\nexport async function withRetry<T>(\n  fn: () => Promise<T>,\n  config: RetryConfig = {}\n): Promise<T> {\n  const {\n    maxRetries = DEFAULT_RETRY_CONFIG.maxRetries,\n    baseDelay = DEFAULT_RETRY_CONFIG.baseDelay,\n    maxDelay = DEFAULT_RETRY_CONFIG.maxDelay,\n    retryOn,\n    onRetry,\n    delayFn,\n  } = config;\n\n  // Determine which codes to retry on\n  const retryableCodes = retryOn ?? DEFAULT_RETRYABLE_CODES;\n\n  let lastError: LLMProviderError | null = null;\n\n  for (let attempt = 0; attempt <= maxRetries; attempt++) {\n    try {\n      return await fn();\n    } catch (error) {\n      // Wrap error for consistent handling\n      const wrappedError = wrapError(error);\n      lastError = wrappedError;\n\n      // Check if we should retry\n      const isLastAttempt = attempt === maxRetries;\n      const shouldRetry =\n        !isLastAttempt && retryableCodes.includes(wrappedError.code);\n\n      if (!shouldRetry) {\n        throw wrappedError;\n      }\n\n      // Calculate delay\n      const delay = delayFn\n        ? delayFn(attempt, baseDelay)\n        : calculateDelay(attempt, baseDelay, maxDelay);\n\n      // Notify callback\n      if (onRetry) {\n        onRetry(attempt + 1, wrappedError, delay);\n      }\n\n      // Wait before next attempt\n      await sleep(delay);\n    }\n  }\n\n  // Should never reach here, but TypeScript needs this\n  throw lastError ?? new Error(\"Retry failed\");\n}\n\n/**\n * Result of withRetryResult - includes metadata about retries\n */\nexport interface RetryResult<T> {\n  /** The successful result */\n  result: T;\n  /** Number of attempts made */\n  attempts: number;\n  /** Total time spent including retries (ms) */\n  totalTime: number;\n  /** Whether any retries occurred */\n  retried: boolean;\n}\n\n/**\n * Execute a function with retry logic, returning metadata about the retries\n *\n * @example\n * ```typescript\n * const { result, attempts, totalTime } = await withRetryResult(\n *   () => generateText({ model, prompt }),\n *   { maxRetries: 3 }\n * );\n * console.log(`Success after ${attempts} attempts in ${totalTime}ms`);\n * ```\n */\nexport async function withRetryResult<T>(\n  fn: () => Promise<T>,\n  config: RetryConfig = {}\n): Promise<RetryResult<T>> {\n  const startTime = Date.now();\n  let attempts = 0;\n\n  const result = await withRetry(async () => {\n    attempts++;\n    return fn();\n  }, config);\n\n  return {\n    result,\n    attempts,\n    totalTime: Date.now() - startTime,\n    retried: attempts > 1,\n  };\n}\n\n/**\n * Create a retry wrapper with pre-configured options\n *\n * @example\n * ```typescript\n * const retryWithBackoff = createRetryWrapper({\n *   maxRetries: 5,\n *   baseDelay: 200,\n *   onRetry: (attempt) => console.log(`Retry ${attempt}...`),\n * });\n *\n * // Use later\n * const result = await retryWithBackoff(() => generateText({ model, prompt }));\n * ```\n */\nexport function createRetryWrapper(defaultConfig: RetryConfig) {\n  return async function <T>(\n    fn: () => Promise<T>,\n    overrideConfig?: RetryConfig\n  ): Promise<T> {\n    return withRetry(fn, { ...defaultConfig, ...overrideConfig });\n  };\n}\n","/**\n * Structured Output Functions (Edge-Native)\n *\n * Pure implementation without AI SDK dependencies\n * Uses JSON extraction from text responses with Zod validation\n */\n\nimport type { z } from \"zod\";\nimport { LLMProviderError } from \"./errors.js\";\nimport { generate } from \"./factory.js\";\nimport type { ModelSpec, Credentials } from \"./types.js\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface GenerateObjectOptions<T extends z.ZodType> {\n  /** Model specification (e.g., \"groq:llama-3.1-8b-instant\") */\n  model: ModelSpec | string;\n  /** API credentials */\n  credentials: Credentials;\n  /** Zod schema for the expected output */\n  schema: T;\n  /** User prompt */\n  prompt: string;\n  /** Optional system prompt */\n  system?: string;\n  /** Temperature (0-1) */\n  temperature?: number;\n  /** Max tokens */\n  maxTokens?: number;\n}\n\nexport interface GenerateObjectResult<T> {\n  /** Parsed and validated object */\n  object: T;\n  /** Raw text response */\n  rawText: string;\n  /** Token usage */\n  usage?: {\n    promptTokens: number;\n    completionTokens: number;\n  };\n}\n\n// =============================================================================\n// Core Functions\n// =============================================================================\n\n/**\n * Generate a structured object using edge-native implementation\n *\n * @example\n * ```typescript\n * const result = await generateObject({\n *   model: \"groq:llama-3.1-8b-instant\",\n *   credentials: { groqApiKey: process.env.GROQ_API_KEY },\n *   schema: z.object({ name: z.string(), age: z.number() }),\n *   prompt: \"Generate a person\",\n * });\n * ```\n */\nexport async function generateObject<T extends z.ZodType>(\n  options: GenerateObjectOptions<T>\n): Promise<GenerateObjectResult<z.infer<T>>> {\n  const { model, credentials, schema, prompt, system, temperature, maxTokens } = options;\n\n  // Create JSON prompt\n  const jsonPrompt = `${prompt}\n\nRespond with valid JSON only, no other text. The JSON must match this schema:\n${JSON.stringify(schema._def, null, 2)}\n\nExample format: {\"field1\": \"value1\", \"field2\": 123}`;\n\n  const messages = [\n    ...(system ? [{ role: \"system\", content: system }] : []),\n    { role: \"user\", content: jsonPrompt },\n  ];\n\n  const result = await generate(model, messages, credentials, {\n    temperature,\n    maxTokens,\n  });\n\n  const object = extractJSON(result.text, schema);\n\n  return {\n    object,\n    rawText: result.text,\n    usage: result.usage,\n  };\n}\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\n/**\n * Extract JSON from text response (edge-native)\n *\n * @example\n * ```typescript\n * const response = \"Here's the data: {\\\"name\\\": \\\"test\\\", \\\"value\\\": 42}\";\n * const schema = z.object({ name: z.string(), value: z.number() });\n * const result = extractJSON(response, schema);\n * // => { name: \"test\", value: 42 }\n * ```\n */\nexport function extractJSON<T extends z.ZodType>(\n  text: string,\n  schema?: T\n): T extends z.ZodType ? z.infer<T> : unknown {\n  // Try to find JSON in the text\n  const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n  if (!jsonMatch) {\n    throw new LLMProviderError({\n      message: \"No JSON object found in response\",\n      code: \"INVALID_RESPONSE\",\n    });\n  }\n\n  try {\n    const parsed = JSON.parse(jsonMatch[0]);\n\n    if (schema) {\n      const result = schema.safeParse(parsed);\n\n      if (!result.success) {\n        throw new LLMProviderError({\n          message: `Schema validation failed: ${result.error.message}`,\n          code: \"VALIDATION\",\n        });\n      }\n\n      return result.data;\n    }\n\n    return parsed;\n  } catch (error) {\n    if (error instanceof LLMProviderError) throw error;\n\n    throw new LLMProviderError({\n      message: `Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`,\n      code: \"INVALID_RESPONSE\",\n      cause: error instanceof Error ? error : undefined,\n    });\n  }\n}","/**\n * Edge-native streaming utilities using Web Streams API\n * \n * Provides WebStreams-compatible streaming for edge computing environments\n * like Cloudflare Workers, Vercel Edge Functions, etc.\n */\n\nimport type { Credentials } from \"./types.js\";\n\n// =============================================================================\n// WebStreams-compatible Cloudflare API\n// =============================================================================\n\nexport interface CloudflareStreamChunk {\n  response: string;\n  finished?: boolean;\n}\n\n/**\n * Stream Cloudflare Workers AI responses using ReadableStream (WebStreams API)\n * This is more suitable for edge environments than AsyncGenerator.\n * \n * @example\n * ```typescript\n * const stream = createCloudflareStream(model, messages, credentials);\n * \n * const reader = stream.getReader();\n * while (true) {\n *   const { done, value } = await reader.read();\n *   if (done) break;\n *   console.log(value); // CloudflareStreamChunk\n * }\n * ```\n */\n/**\n * Process SSE lines and emit CloudflareStreamChunk events\n * Returns true if [DONE] was encountered\n */\nfunction processSSELines(lines: string[], controller: ReadableStreamDefaultController<CloudflareStreamChunk>): boolean {\n  for (const line of lines) {\n    const trimmed = line.trim();\n    if (!trimmed || !trimmed.startsWith(\"data: \")) continue;\n\n    const data = trimmed.slice(6);\n    if (data === \"[DONE]\") {\n      controller.enqueue({ response: \"\", finished: true });\n      return true;\n    }\n\n    try {\n      const parsed = JSON.parse(data);\n      if (parsed.response) {\n        controller.enqueue({ response: parsed.response });\n      }\n    } catch { /* skip malformed JSON */ }\n  }\n  return false;\n}\n\nasync function readSSEStream(body: ReadableStream<Uint8Array>, controller: ReadableStreamDefaultController<CloudflareStreamChunk>): Promise<void> {\n  const reader = body.getReader();\n  const decoder = new TextDecoder();\n  let buffer = \"\";\n\n  while (true) {\n    const { done, value } = await reader.read();\n    if (done) break;\n\n    buffer += decoder.decode(value, { stream: true });\n    const lines = buffer.split(\"\\n\");\n    buffer = lines.pop() ?? \"\";\n\n    if (processSSELines(lines, controller)) {\n      controller.close();\n      return;\n    }\n  }\n  controller.close();\n}\n\nexport function createCloudflareStream(\n  model: string,\n  messages: Array<{ role: string; content: string }>,\n  credentials: Credentials\n): ReadableStream<CloudflareStreamChunk> {\n  const { cloudflareApiKey, cloudflareEmail, cloudflareAccountId } = credentials;\n\n  if (!cloudflareApiKey || !cloudflareEmail || !cloudflareAccountId) {\n    throw new Error(\"Cloudflare REST API requires cloudflareApiKey, cloudflareEmail, and cloudflareAccountId\");\n  }\n\n  return new ReadableStream({\n    async start(controller) {\n      try {\n        const response = await fetch(\n          `https://api.cloudflare.com/client/v4/accounts/${cloudflareAccountId}/ai/run/${model}`,\n          {\n            method: \"POST\",\n            headers: { \"X-Auth-Email\": cloudflareEmail, \"X-Auth-Key\": cloudflareApiKey, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify({ messages, stream: true }),\n          }\n        );\n\n        if (!response.ok) throw new Error(`Cloudflare API error: ${response.status} ${await response.text()}`);\n        if (!response.body) throw new Error(\"No response body for streaming\");\n\n        await readSSEStream(response.body, controller);\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n  });\n}\n\n/**\n * Convert a CloudflareStreamChunk stream to text chunks\n * Useful for integrating with other streaming APIs\n * \n * @example\n * ```typescript\n * const cloudflareStream = createCloudflareStream(model, messages, credentials);\n * const textStream = cloudflareStreamToText(cloudflareStream);\n * \n * const reader = textStream.getReader();\n * while (true) {\n *   const { done, value } = await reader.read();\n *   if (done) break;\n *   process.stdout.write(value); // string\n * }\n * ```\n */\nexport function cloudflareStreamToText(\n  stream: ReadableStream<CloudflareStreamChunk>\n): ReadableStream<string> {\n  return new ReadableStream({\n    start(controller) {\n      const reader = stream.getReader();\n\n      async function pump(): Promise<void> {\n        try {\n          while (true) {\n            const { done, value } = await reader.read();\n            if (done) {\n              controller.close();\n              break;\n            }\n\n            if (value.finished) {\n              controller.close();\n              break;\n            }\n\n            if (value.response) {\n              controller.enqueue(value.response);\n            }\n          }\n        } catch (error) {\n          controller.error(error);\n        }\n      }\n\n      pump();\n    },\n  });\n}\n\n// =============================================================================\n// Response utilities\n// =============================================================================\n\n/**\n * Convert a ReadableStream to Response object\n * Useful for returning streaming responses in edge functions\n * \n * @example\n * ```typescript\n * export async function POST(request: Request) {\n *   const stream = createCloudflareStream(model, messages, credentials);\n *   const textStream = cloudflareStreamToText(stream);\n *   \n *   return streamToResponse(textStream, {\n *     headers: { \"Content-Type\": \"text/plain; charset=utf-8\" }\n *   });\n * }\n * ```\n */\nexport function streamToResponse(\n  stream: ReadableStream<string>,\n  init?: ResponseInit\n): Response {\n  // Convert string stream to Uint8Array stream for Response\n  const encoder = new TextEncoder();\n  const uint8Stream = new ReadableStream({\n    start(controller) {\n      const reader = stream.getReader();\n\n      async function pump(): Promise<void> {\n        try {\n          while (true) {\n            const { done, value } = await reader.read();\n            if (done) {\n              controller.close();\n              break;\n            }\n            controller.enqueue(encoder.encode(value));\n          }\n        } catch (error) {\n          controller.error(error);\n        }\n      }\n\n      pump();\n    },\n  });\n\n  return new Response(uint8Stream, {\n    ...init,\n    headers: {\n      \"Content-Type\": \"text/plain; charset=utf-8\",\n      \"Cache-Control\": \"no-cache\",\n      ...init?.headers,\n    },\n  });\n}\n\n/**\n * Convert ReadableStream to AsyncIterator for easier consumption\n * \n * @example\n * ```typescript\n * const stream = createCloudflareStream(model, messages, credentials);\n * \n * for await (const chunk of streamToAsyncIterator(stream)) {\n *   console.log(chunk.response);\n * }\n * ```\n */\nexport async function* streamToAsyncIterator<T>(\n  stream: ReadableStream<T>\n): AsyncIterableIterator<T> {\n  const reader = stream.getReader();\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n      yield value;\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}","/**\n * Memory optimization utilities for edge computing environments\n * \n * Edge environments like Cloudflare Workers have strict memory limits.\n * These utilities help optimize memory usage when working with LLMs.\n */\n\nimport type { Credentials } from \"./types.js\";\n\n// =============================================================================\n// Message Optimization\n// =============================================================================\n\nexport interface OptimizedMessage {\n  role: \"system\" | \"user\" | \"assistant\";\n  content: string;\n  tokens?: number;\n}\n\n/**\n * Truncate message history to stay within token limits\n * Useful for edge environments with memory constraints\n * \n * @example\n * ```typescript\n * const messages = [\n *   { role: \"system\", content: \"You are a helpful assistant.\" },\n *   { role: \"user\", content: \"Hello\" },\n *   { role: \"assistant\", content: \"Hi there!\" },\n *   // ... many more messages\n * ];\n * \n * // Keep only recent messages within token limit\n * const optimized = truncateMessages(messages, 2000);\n * ```\n */\nexport function truncateMessages(\n  messages: Array<{ role: string; content: string }>,\n  maxTokens: number,\n  tokensPerChar = 0.25 // Rough estimation\n): OptimizedMessage[] {\n  let totalTokens = 0;\n\n  // Always keep system message if it exists\n  const systemMessage = messages.find(msg => msg.role === \"system\");\n  const systemTokens = systemMessage \n    ? Math.ceil(systemMessage.content.length * tokensPerChar)\n    : 0;\n  totalTokens += systemTokens;\n\n  // Add messages from newest to oldest until we hit token limit\n  const otherMessages = messages\n    .filter(msg => msg.role !== \"system\")\n    .reverse(); // Start from newest\n\n  const selectedOtherMessages: OptimizedMessage[] = [];\n  for (const message of otherMessages) {\n    const tokens = Math.ceil(message.content.length * tokensPerChar);\n    \n    if (totalTokens + tokens > maxTokens) {\n      break;\n    }\n\n    selectedOtherMessages.unshift({ ...message, tokens } as OptimizedMessage);\n    totalTokens += tokens;\n  }\n\n  // Combine system message (if exists) with selected other messages\n  const result: OptimizedMessage[] = [];\n  if (systemMessage) {\n    result.push({ ...systemMessage, tokens: systemTokens } as OptimizedMessage);\n  }\n  result.push(...selectedOtherMessages);\n\n  return result;\n}\n\n/**\n * Compress long messages by removing unnecessary whitespace and newlines\n */\nexport function compressMessage(content: string): string {\n  return content\n    .replace(/[ \\t]+/g, \" \") // Replace multiple spaces/tabs with single space\n    .replace(/\\n\\s*\\n/g, \"\\n\") // Replace multiple newlines with single newline\n    .replace(/\\s+\\n/g, \"\\n\") // Remove trailing spaces before newlines\n    .replace(/\\n\\s+/g, \"\\n\") // Remove leading spaces after newlines\n    .trim();\n}\n\n// =============================================================================\n// Streaming Buffer Management\n// =============================================================================\n\n/**\n * Memory-efficient buffer for streaming responses\n * Automatically flushes when buffer gets too large\n */\nexport class StreamingBuffer {\n  private buffer: string[] = [];\n  private maxSize: number;\n  private onFlush?: (content: string) => void;\n\n  constructor(maxSize = 1024, onFlush?: (content: string) => void) {\n    this.maxSize = maxSize;\n    this.onFlush = onFlush;\n  }\n\n  append(chunk: string): void {\n    this.buffer.push(chunk);\n    \n    if (this.getTotalLength() > this.maxSize) {\n      this.flush();\n    }\n  }\n\n  flush(): string {\n    const content = this.buffer.join(\"\");\n    this.buffer = [];\n    \n    if (this.onFlush) {\n      this.onFlush(content);\n    }\n    \n    return content;\n  }\n\n  getContent(): string {\n    return this.buffer.join(\"\");\n  }\n\n  getTotalLength(): number {\n    return this.buffer.reduce((sum, chunk) => sum + chunk.length, 0);\n  }\n\n  clear(): void {\n    this.buffer = [];\n  }\n}\n\n// =============================================================================\n// Cache Utilities\n// =============================================================================\n\n/**\n * Simple LRU cache for edge environments\n * Useful for caching model responses or credentials\n */\nexport class EdgeCache<T> {\n  private cache = new Map<string, { value: T; timestamp: number }>();\n  private maxSize: number;\n  private ttl: number; // Time to live in milliseconds\n\n  constructor(maxSize = 100, ttl = 5 * 60 * 1000) { // Default 5 minutes\n    this.maxSize = maxSize;\n    this.ttl = ttl;\n  }\n\n  get(key: string): T | undefined {\n    const entry = this.cache.get(key);\n    \n    if (!entry) {\n      return undefined;\n    }\n\n    // Check if expired\n    if (Date.now() - entry.timestamp > this.ttl) {\n      this.cache.delete(key);\n      return undefined;\n    }\n\n    // Move to end (most recently used)\n    this.cache.delete(key);\n    this.cache.set(key, entry);\n    \n    return entry.value;\n  }\n\n  set(key: string, value: T): void {\n    // Remove oldest if at capacity\n    if (this.cache.size >= this.maxSize && !this.cache.has(key)) {\n      const firstKey = this.cache.keys().next().value;\n      if (firstKey !== undefined) {\n        this.cache.delete(firstKey);\n      }\n    }\n\n    this.cache.set(key, {\n      value,\n      timestamp: Date.now(),\n    });\n  }\n\n  has(key: string): boolean {\n    return this.get(key) !== undefined;\n  }\n\n  delete(key: string): boolean {\n    return this.cache.delete(key);\n  }\n\n  clear(): void {\n    this.cache.clear();\n  }\n\n  size(): number {\n    return this.cache.size;\n  }\n\n  cleanup(): number {\n    const now = Date.now();\n    let removed = 0;\n\n    for (const [key, entry] of this.cache.entries()) {\n      if (now - entry.timestamp > this.ttl) {\n        this.cache.delete(key);\n        removed++;\n      }\n    }\n\n    return removed;\n  }\n}\n\n// =============================================================================\n// Memory Monitoring\n// =============================================================================\n\n/**\n * Get rough memory usage estimate\n * Note: This is a rough approximation as JS doesn't expose precise memory info\n */\nexport function getMemoryEstimate(): {\n  heapUsed?: number;\n  heapTotal?: number;\n  external?: number;\n} {\n  // In Node.js environment\n  if (typeof process !== \"undefined\" && process.memoryUsage) {\n    const usage = process.memoryUsage();\n    return {\n      heapUsed: usage.heapUsed,\n      heapTotal: usage.heapTotal,\n      external: usage.external,\n    };\n  }\n\n  // In browser/edge environments (limited info)\n  if (typeof performance !== \"undefined\" && \"memory\" in performance) {\n    const memory = (performance as unknown as { memory?: { usedJSHeapSize: number; totalJSHeapSize: number } }).memory;\n    return {\n      heapUsed: memory?.usedJSHeapSize,\n      heapTotal: memory?.totalJSHeapSize,\n    };\n  }\n\n  return {};\n}\n\n/**\n * Create a memory-aware credentials cache\n * Automatically cleans up when memory gets low\n */\nexport function createCredentialsCache(maxSize = 10, ttl = 10 * 60 * 1000): EdgeCache<Credentials> {\n  const cache = new EdgeCache<Credentials>(maxSize, ttl);\n\n  // Periodically cleanup expired entries\n  if (typeof setInterval !== \"undefined\") {\n    setInterval(() => {\n      cache.cleanup();\n    }, ttl / 2);\n  }\n\n  return cache;\n}","/**\n * Groq-specific streaming handlers\n *\n * Dedicated handlers for Groq-hosted models including GPT-OSS and Llama variants.\n */\n\nimport type { StreamHandler } from \"./streaming-handlers.js\";\n\n// =============================================================================\n// GPT-OSS Models (OpenAI Open Source on Groq)\n// =============================================================================\n\n/**\n * GPT-OSS-120B specific handler\n * This model needs special care for long outputs and may stop early\n */\nexport const gptOss120bHandler: StreamHandler = {\n  model: 'openai/gpt-oss-120b',\n  async createStream(messages, apiKey, options = {}) {\n    const requestBody = {\n      model: 'openai/gpt-oss-120b',\n      messages,\n      stream: true,\n      temperature: options.temperature ?? 0.7,\n      max_tokens: options.maxTokens ?? 8192,\n      top_p: options.topP ?? 1.0,\n      frequency_penalty: 0,\n      presence_penalty: 0,\n      stop: options.stopSequences === undefined ? [] : options.stopSequences,\n      n: 1,\n    };\n\n    const response = await fetch(\"https://api.groq.com/openai/v1/chat/completions\", {\n      method: \"POST\",\n      headers: {\n        \"Authorization\": `Bearer ${apiKey}`,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(requestBody),\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      throw new Error(`GPT-OSS-120B streaming failed: ${response.status} - ${errorText}`);\n    }\n\n    let buffer = '';\n\n    return response.body!\n      .pipeThrough(new TextDecoderStream())\n      .pipeThrough(new TransformStream<string, string>({\n        transform(chunk, controller) {\n          buffer += chunk;\n          const lines = buffer.split('\\n');\n          buffer = lines.pop() || '';\n\n          for (const line of lines) {\n            const trimmed = line.trim();\n            if (!trimmed || !trimmed.startsWith('data: ')) continue;\n\n            const data = trimmed.slice(6);\n            if (data === '[DONE]') continue;\n\n            try {\n              const parsed = JSON.parse(data);\n              const content = parsed.choices?.[0]?.delta?.content;\n              if (content !== undefined && content !== null) {\n                controller.enqueue(content);\n              }\n            } catch { /* ignore parse errors */ }\n          }\n        },\n\n        flush(controller) {\n          if (buffer.trim()) {\n            if (buffer.trim().startsWith('data: ')) {\n              const data = buffer.trim().slice(6);\n              if (data !== '[DONE]') {\n                try {\n                  const parsed = JSON.parse(data);\n                  const content = parsed.choices?.[0]?.delta?.content;\n                  if (content) {\n                    controller.enqueue(content);\n                  }\n                } catch { /* ignore incomplete chunk */ }\n              }\n            }\n          }\n        }\n      }));\n  }\n};\n\n/**\n * GPT-OSS-20B specific handler\n */\nexport const gptOss20bHandler: StreamHandler = {\n  model: 'openai/gpt-oss-20b',\n  async createStream(messages, apiKey, options = {}) {\n    const requestBody = {\n      model: 'openai/gpt-oss-20b',\n      messages,\n      stream: true,\n      temperature: options.temperature ?? 0.7,\n      max_tokens: options.maxTokens ?? 4096,\n      top_p: options.topP ?? 1.0,\n      stop: options.stopSequences === undefined ? [] : options.stopSequences,\n      n: 1,\n    };\n\n    const response = await fetch(\"https://api.groq.com/openai/v1/chat/completions\", {\n      method: \"POST\",\n      headers: {\n        \"Authorization\": `Bearer ${apiKey}`,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(requestBody),\n    });\n\n    if (!response.ok) {\n      throw new Error(`GPT-OSS-20B streaming failed: ${response.status}`);\n    }\n\n    let buffer = '';\n    return response.body!\n      .pipeThrough(new TextDecoderStream())\n      .pipeThrough(new TransformStream<string, string>({\n        transform(chunk, controller) {\n          buffer += chunk;\n          const lines = buffer.split('\\n');\n          buffer = lines.pop() || '';\n\n          for (const line of lines) {\n            const trimmed = line.trim();\n            if (!trimmed || !trimmed.startsWith('data: ')) continue;\n\n            const data = trimmed.slice(6);\n            if (data === '[DONE]') continue;\n\n            try {\n              const parsed = JSON.parse(data);\n              const content = parsed.choices?.[0]?.delta?.content;\n              if (content !== undefined && content !== null) {\n                controller.enqueue(content);\n              }\n            } catch { /* ignore parse errors */ }\n          }\n        }\n      }));\n  }\n};\n\n// =============================================================================\n// Llama Models\n// =============================================================================\n\n/**\n * Llama 3.1 8B Instant handler\n */\nexport const llama31InstantHandler: StreamHandler = {\n  model: 'llama-3.1-8b-instant',\n  async createStream(messages, apiKey, options = {}) {\n    const requestBody = {\n      model: 'llama-3.1-8b-instant',\n      messages,\n      stream: true,\n      temperature: options.temperature ?? 0.7,\n      max_tokens: options.maxTokens ?? 2048,\n      stop: options.stopSequences,\n    };\n\n    const response = await fetch(\"https://api.groq.com/openai/v1/chat/completions\", {\n      method: \"POST\",\n      headers: {\n        \"Authorization\": `Bearer ${apiKey}`,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(requestBody),\n    });\n\n    if (!response.ok) {\n      throw new Error(`Llama 3.1 8B streaming failed: ${response.status}`);\n    }\n\n    let buffer = '';\n    return response.body!\n      .pipeThrough(new TextDecoderStream())\n      .pipeThrough(new TransformStream<string, string>({\n        transform(chunk, controller) {\n          buffer += chunk;\n          const lines = buffer.split('\\n');\n          buffer = lines.pop() || '';\n\n          for (const line of lines) {\n            const trimmed = line.trim();\n            if (!trimmed || !trimmed.startsWith('data: ')) continue;\n\n            const data = trimmed.slice(6);\n            if (data === '[DONE]') continue;\n\n            try {\n              const parsed = JSON.parse(data);\n              const content = parsed.choices?.[0]?.delta?.content;\n              if (content !== undefined && content !== null) {\n                controller.enqueue(content);\n              }\n            } catch { /* ignore parse errors */ }\n          }\n        }\n      }));\n  }\n};\n\n/**\n * Llama 3.3 70B Versatile handler\n */\nexport const llama33VersatileHandler: StreamHandler = {\n  model: 'llama-3.3-70b-versatile',\n  async createStream(messages, apiKey, options = {}) {\n    const requestBody = {\n      model: 'llama-3.3-70b-versatile',\n      messages,\n      stream: true,\n      temperature: options.temperature ?? 0.7,\n      max_tokens: options.maxTokens ?? 2048,\n      stop: options.stopSequences,\n    };\n\n    const response = await fetch(\"https://api.groq.com/openai/v1/chat/completions\", {\n      method: \"POST\",\n      headers: {\n        \"Authorization\": `Bearer ${apiKey}`,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify(requestBody),\n    });\n\n    if (!response.ok) {\n      throw new Error(`Llama 3.3 70B streaming failed: ${response.status}`);\n    }\n\n    let buffer = '';\n    return response.body!\n      .pipeThrough(new TextDecoderStream())\n      .pipeThrough(new TransformStream<string, string>({\n        transform(chunk, controller) {\n          buffer += chunk;\n          const lines = buffer.split('\\n');\n          buffer = lines.pop() || '';\n\n          for (const line of lines) {\n            const trimmed = line.trim();\n            if (!trimmed || !trimmed.startsWith('data: ')) continue;\n\n            const data = trimmed.slice(6);\n            if (data === '[DONE]') continue;\n\n            try {\n              const parsed = JSON.parse(data);\n              const content = parsed.choices?.[0]?.delta?.content;\n              if (content !== undefined && content !== null) {\n                controller.enqueue(content);\n              }\n            } catch { /* ignore parse errors */ }\n          }\n        }\n      }));\n  }\n};\n","/**\n * Gemini-specific streaming handlers\n *\n * Dedicated handlers for Google Gemini models with SSE streaming support.\n */\n\nimport type { StreamHandler } from \"./streaming-handlers.js\";\n\n// =============================================================================\n// Gemini Models\n// =============================================================================\n\n/**\n * Gemini 2.0 Flash handler\n */\nexport const gemini20FlashHandler: StreamHandler = {\n  model: 'gemini-2.0-flash',\n  async createStream(messages, apiKey, options = {}) {\n    const contents = messages\n      .filter(m => m.role !== \"system\")\n      .map(m => ({\n        role: m.role === \"assistant\" ? \"model\" : \"user\",\n        parts: [{ text: m.content }],\n      }));\n\n    const systemInstruction = messages.find(m => m.role === \"system\")?.content;\n\n    const response = await fetch(\n      `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=${apiKey}`,\n      {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          contents,\n          ...(systemInstruction && { systemInstruction: { parts: [{ text: systemInstruction }] } }),\n          generationConfig: {\n            temperature: options.temperature ?? 0.7,\n            maxOutputTokens: options.maxTokens ?? 2048,\n            topP: options.topP ?? 0.95,\n            stopSequences: options.stopSequences,\n          },\n        }),\n      }\n    );\n\n    if (!response.ok) {\n      throw new Error(`Gemini 2.0 Flash streaming failed: ${response.status}`);\n    }\n\n    let buffer = '';\n    return response.body!\n      .pipeThrough(new TextDecoderStream())\n      .pipeThrough(new TransformStream<string, string>({\n        transform(chunk, controller) {\n          buffer += chunk;\n          const lines = buffer.split('\\n');\n          buffer = lines.pop() || '';\n\n          for (const line of lines) {\n            const trimmed = line.trim();\n            if (!trimmed || !trimmed.startsWith('data: ')) continue;\n\n            const data = trimmed.slice(6);\n            if (data === '[DONE]') continue;\n\n            try {\n              const parsed = JSON.parse(data);\n              const text = parsed.candidates?.[0]?.content?.parts?.[0]?.text;\n              if (text) {\n                controller.enqueue(text);\n              }\n            } catch { /* ignore parse errors */ }\n          }\n        }\n      }));\n  }\n};\n\n/**\n * Gemini 1.5 Flash handler\n */\nexport const gemini15FlashHandler: StreamHandler = {\n  model: 'gemini-1.5-flash',\n  async createStream(messages, apiKey, options = {}) {\n    const contents = messages\n      .filter(m => m.role !== \"system\")\n      .map(m => ({\n        role: m.role === \"assistant\" ? \"model\" : \"user\",\n        parts: [{ text: m.content }],\n      }));\n\n    const systemInstruction = messages.find(m => m.role === \"system\")?.content;\n\n    const response = await fetch(\n      `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=${apiKey}`,\n      {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          contents,\n          ...(systemInstruction && { systemInstruction: { parts: [{ text: systemInstruction }] } }),\n          generationConfig: {\n            temperature: options.temperature ?? 0.7,\n            maxOutputTokens: options.maxTokens ?? 2048,\n            topP: options.topP ?? 0.95,\n            stopSequences: options.stopSequences,\n          },\n        }),\n      }\n    );\n\n    if (!response.ok) {\n      throw new Error(`Gemini 1.5 Flash streaming failed: ${response.status}`);\n    }\n\n    let buffer = '';\n    return response.body!\n      .pipeThrough(new TextDecoderStream())\n      .pipeThrough(new TransformStream<string, string>({\n        transform(chunk, controller) {\n          buffer += chunk;\n          const lines = buffer.split('\\n');\n          buffer = lines.pop() || '';\n\n          for (const line of lines) {\n            const trimmed = line.trim();\n            if (!trimmed || !trimmed.startsWith('data: ')) continue;\n\n            const data = trimmed.slice(6);\n            if (data === '[DONE]') continue;\n\n            try {\n              const parsed = JSON.parse(data);\n              const text = parsed.candidates?.[0]?.content?.parts?.[0]?.text;\n              if (text) {\n                controller.enqueue(text);\n              }\n            } catch { /* ignore parse errors */ }\n          }\n        }\n      }));\n  }\n};\n","/**\n * Model-specific streaming handlers - Registry\n *\n * Central registry for model-specific stream handlers.\n * Individual handler implementations are in separate files.\n */\n\nimport {\n  gptOss120bHandler,\n  gptOss20bHandler,\n  llama31InstantHandler,\n  llama33VersatileHandler,\n} from \"./streaming-handlers-groq.js\";\nimport {\n  gemini20FlashHandler,\n  gemini15FlashHandler,\n} from \"./streaming-handlers-gemini.js\";\n\n// =============================================================================\n// Handler Types\n// =============================================================================\n\nexport interface StreamHandler {\n  model: string;\n  createStream: (\n    messages: Array<{ role: string; content: string }>,\n    apiKey: string,\n    options?: StreamOptions\n  ) => Promise<ReadableStream<string>>;\n}\n\nexport interface StreamOptions {\n  temperature?: number;\n  maxTokens?: number;\n  topP?: number;\n  stopSequences?: string[] | null;\n}\n\n// =============================================================================\n// Handler Registry\n// =============================================================================\n\nexport const STREAM_HANDLERS: Map<string, StreamHandler> = new Map([\n  // GPT-OSS models\n  ['openai/gpt-oss-120b', gptOss120bHandler],\n  ['openai/gpt-oss-20b', gptOss20bHandler],\n\n  // Llama models\n  ['llama-3.1-8b-instant', llama31InstantHandler],\n  ['llama-3.3-70b-versatile', llama33VersatileHandler],\n\n  // Gemini models\n  ['gemini-2.0-flash', gemini20FlashHandler],\n  ['gemini-1.5-flash', gemini15FlashHandler],\n  ['gemini-1.5-flash-002', gemini15FlashHandler],\n]);\n\n/**\n * Get a stream handler for a specific model\n */\nexport function getStreamHandler(model: string): StreamHandler | undefined {\n  return STREAM_HANDLERS.get(model);\n}\n\n/**\n * Check if a model has a dedicated stream handler\n */\nexport function hasStreamHandler(model: string): boolean {\n  return STREAM_HANDLERS.has(model);\n}\n\n// Re-export individual handlers for direct access\nexport {\n  gptOss120bHandler,\n  gptOss20bHandler,\n  llama31InstantHandler,\n  llama33VersatileHandler,\n} from \"./streaming-handlers-groq.js\";\n\nexport {\n  gemini20FlashHandler,\n  gemini15FlashHandler,\n} from \"./streaming-handlers-gemini.js\";\n","/**\n * Fluent API - Streaming Implementation Functions\n *\n * Provider-specific streaming implementations for the fluent builder.\n * Creates ReadableStream<string> for each provider's streaming API.\n */\n\nimport type { Credentials } from \"./types.js\";\nimport { callCloudflareRestStream } from \"./factory.js\";\nimport { getStreamHandler } from \"./streaming-handlers.js\";\n\n// =============================================================================\n// Provider Stream Router\n// =============================================================================\n\ninterface ProviderStreamConfig {\n  provider: string;\n  model: string;\n  messages: Array<{ role: string; content: string }>;\n  credentials: Credentials;\n  options?: { temperature?: number; maxTokens?: number };\n}\n\nexport async function createProviderStream(config: ProviderStreamConfig): Promise<ReadableStream<string>> {\n  const { provider, model, messages, credentials, options } = config;\n  return routeToProvider(provider, model, messages, credentials, options);\n}\n\nfunction getApiKeyOrThrow(credentials: Credentials, provider: string): string {\n  const keyMap: Record<string, string | undefined> = {\n    anthropic: credentials.anthropicApiKey,\n    openai: credentials.openaiApiKey,\n    groq: credentials.groqApiKey,\n    gemini: credentials.geminiApiKey,\n  };\n  const key = keyMap[provider];\n  if (!key) throw new Error(`${provider}ApiKey is required for ${provider} streaming`);\n  return key;\n}\n\nasync function routeToProvider(provider: string, model: string, messages: Array<{ role: string; content: string }>, credentials: Credentials, options?: { temperature?: number; maxTokens?: number }): Promise<ReadableStream<string>> {\n  if (provider === \"cloudflare\") {\n    return createCloudflareReadableStream(model, messages, credentials);\n  }\n  const apiKey = getApiKeyOrThrow(credentials, provider);\n  if (provider === \"groq\" || provider === \"gemini\") {\n    const handler = getStreamHandler(model);\n    if (handler) return handler.createStream(messages, apiKey, options);\n  }\n  const streamFn = STREAM_CREATORS[provider];\n  if (!streamFn) throw new Error(`Streaming not supported for provider: ${provider}`);\n  return streamFn(model, messages, apiKey, options);\n}\n\nfunction createCloudflareReadableStream(model: string, messages: Array<{ role: string; content: string }>, credentials: Credentials): ReadableStream<string> {\n  if (!credentials.cloudflareApiKey || !credentials.cloudflareEmail || !credentials.cloudflareAccountId) {\n    throw new Error(\"Cloudflare credentials required for streaming\");\n  }\n  const iter = callCloudflareRestStream(model, messages, credentials);\n  return new ReadableStream<string>({\n    async start(controller) {\n      try {\n        for await (const chunk of iter) { controller.enqueue(chunk); }\n        controller.close();\n      } catch (error) { controller.error(error); }\n    }\n  });\n}\n\ntype StreamCreator = (model: string, messages: Array<{ role: string; content: string }>, apiKey: string, options?: { temperature?: number; maxTokens?: number }) => Promise<ReadableStream<string>>;\n\nconst STREAM_CREATORS: Record<string, StreamCreator> = {\n  anthropic: createAnthropicStream,\n  openai: createOpenAIStream,\n  groq: createGroqStream,\n  gemini: createGeminiStream,\n};\n\n// =============================================================================\n// Shared SSE Parsing\n// =============================================================================\n\ntype ContentExtractor = (parsed: Record<string, unknown>) => string | null;\n\nfunction createSSETransform(extract: ContentExtractor): TransformStream<string, string> {\n  let buffer = '';\n  return new TransformStream({\n    transform(chunk, controller) {\n      buffer += chunk;\n      const lines = buffer.split('\\n');\n      buffer = lines.pop() || '';\n      for (const line of lines) {\n        const trimmed = line.trim();\n        if (!trimmed.startsWith('data: ')) continue;\n        const data = trimmed.slice(6);\n        if (data === '[DONE]') continue;\n        try {\n          const content = extract(JSON.parse(data));\n          if (content) controller.enqueue(content);\n        } catch { /* ignore parse errors */ }\n      }\n    },\n    flush(controller) {\n      if (buffer.trim().startsWith('data: ')) {\n        const data = buffer.trim().slice(6);\n        if (data !== '[DONE]') {\n          try {\n            const content = extract(JSON.parse(data));\n            if (content) controller.enqueue(content);\n          } catch { /* ignore incomplete final chunk */ }\n        }\n      }\n    }\n  });\n}\n\nconst extractOpenAI: ContentExtractor = (p) => {\n  const choices = p.choices as Array<Record<string, unknown>> | undefined;\n  const delta = choices?.[0]?.delta as Record<string, unknown> | undefined;\n  return (delta?.content as string) || null;\n};\n\nconst extractGemini: ContentExtractor = (p) => {\n  const candidates = p.candidates as Array<Record<string, unknown>> | undefined;\n  const content = candidates?.[0]?.content as Record<string, unknown> | undefined;\n  const parts = content?.parts as Array<Record<string, unknown>> | undefined;\n  return (parts?.[0]?.text as string) || null;\n};\n\nconst extractAnthropic: ContentExtractor = (p) => {\n  if (p.type === 'content_block_delta') {\n    const delta = p.delta as Record<string, unknown> | undefined;\n    return (delta?.text as string) || null;\n  }\n  return null;\n};\n\nconst extractGroq: ContentExtractor = (p) => {\n  return extractOpenAI(p) || (p.response as string) || null;\n};\n\n// =============================================================================\n// Model Configs\n// =============================================================================\n\nconst MODEL_CONFIGS: Record<string, { maxTokens: number; temperature?: number; topP?: number; stopSequences?: string[] | null }> = {\n  'openai/gpt-oss-120b': { maxTokens: 4096, temperature: 0.7, topP: 1.0, stopSequences: null },\n  'openai/gpt-oss-20b': { maxTokens: 4096, temperature: 0.7, topP: 1.0, stopSequences: null },\n  'llama-3.1-8b-instant': { maxTokens: 2048, temperature: 0.7 },\n  'llama-3.3-70b-versatile': { maxTokens: 2048, temperature: 0.7 },\n  'mixtral-8x7b-32768': { maxTokens: 32768, temperature: 0.7 },\n  'gemma2-9b-it': { maxTokens: 2048, temperature: 0.7 },\n};\n\nexport function getModelConfig(model: string) {\n  const c = MODEL_CONFIGS[model] || {};\n  return { maxTokens: c.maxTokens || 2048, temperature: c.temperature || 0.7, topP: c.topP, stopSequences: c.stopSequences };\n}\n\n// =============================================================================\n// Provider Streaming Functions\n// =============================================================================\n\nasync function fetchAndPipeSSE(url: string, headers: Record<string, string>, body: Record<string, unknown>, extract: ContentExtractor): Promise<ReadableStream<string>> {\n  const response = await fetch(url, { method: \"POST\", headers: { ...headers, \"Content-Type\": \"application/json\" }, body: JSON.stringify(body) });\n  if (!response.ok) {\n    const errorText = await response.text();\n    throw new Error(`Streaming failed: ${response.status} - ${errorText}`);\n  }\n  if (!response.body) throw new Error(\"No response body for streaming\");\n  return response.body.pipeThrough(new TextDecoderStream()).pipeThrough(createSSETransform(extract));\n}\n\nexport async function createAnthropicStream(model: string, messages: Array<{ role: string; content: string }>, apiKey: string, options?: { temperature?: number; maxTokens?: number }): Promise<ReadableStream<string>> {\n  const anthropicMessages = messages.filter(m => m.role !== \"system\").map(msg => ({ role: msg.role === \"user\" ? \"user\" : \"assistant\", content: msg.content }));\n  const system = messages.find(m => m.role === \"system\")?.content;\n  return fetchAndPipeSSE(\"https://api.anthropic.com/v1/messages\", { \"x-api-key\": apiKey, \"anthropic-version\": \"2023-06-01\" }, { model, messages: anthropicMessages, system, max_tokens: options?.maxTokens || 4096, temperature: options?.temperature || 0.7, stream: true }, extractAnthropic);\n}\n\nexport async function createOpenAIStream(model: string, messages: Array<{ role: string; content: string }>, apiKey: string, options?: { temperature?: number; maxTokens?: number }): Promise<ReadableStream<string>> {\n  return fetchAndPipeSSE(\"https://api.openai.com/v1/chat/completions\", { \"Authorization\": `Bearer ${apiKey}` }, { model, messages, stream: true, temperature: options?.temperature || 0.7, max_tokens: options?.maxTokens }, extractOpenAI);\n}\n\nexport async function createGroqStream(model: string, messages: Array<{ role: string; content: string }>, apiKey: string, options?: { temperature?: number; maxTokens?: number }): Promise<ReadableStream<string>> {\n  const config = getModelConfig(model);\n  const body: Record<string, unknown> = { model, messages, stream: true, temperature: options?.temperature ?? config.temperature, max_tokens: options?.maxTokens ?? config.maxTokens };\n  if (config.topP !== undefined) body.top_p = config.topP;\n  if (config.stopSequences !== undefined) body.stop = config.stopSequences;\n  return fetchAndPipeSSE(\"https://api.groq.com/openai/v1/chat/completions\", { \"Authorization\": `Bearer ${apiKey}` }, body, extractGroq);\n}\n\nexport async function createGeminiStream(model: string, messages: Array<{ role: string; content: string }>, apiKey: string, options?: { temperature?: number; maxTokens?: number }): Promise<ReadableStream<string>> {\n  const contents = messages.filter(m => m.role !== \"system\").map(m => ({ role: m.role === \"assistant\" ? \"model\" : \"user\", parts: [{ text: m.content }] }));\n  const systemInstruction = messages.find(m => m.role === \"system\")?.content;\n  return fetchAndPipeSSE(`https://generativelanguage.googleapis.com/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${apiKey}`, {}, { contents, ...(systemInstruction && { systemInstruction: { parts: [{ text: systemInstruction }] } }), generationConfig: { temperature: options?.temperature ?? 0.7, maxOutputTokens: options?.maxTokens ?? 2048 } }, extractGemini);\n}\n","/**\n * Fluent API - Provider-Specific Shortcuts\n *\n * Pre-configured builder shortcuts for each LLM provider.\n * Provides ergonomic access to common models.\n */\n\nimport type { Stream } from \"@aid-on/nagare\";\nimport { quick } from \"./fluent.js\";\n\n// =============================================================================\n// Provider-Specific Shortcuts\n// =============================================================================\n\n/**\n * Anthropic-specific builder shortcuts with streaming support\n */\nexport const anthropic = {\n  /** Claude 4.5 Sonnet - Latest 2025, most capable */\n  sonnet: (apiKey: string) => Object.assign(quick(\"anthropic:claude-sonnet-4-5-20250929\", { anthropicApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"anthropic:claude-sonnet-4-5-20250929\", { anthropicApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n\n  /** Claude 3.5 Haiku - Fast and cheap */\n  haiku: (apiKey: string) => Object.assign(quick(\"anthropic:claude-3-5-haiku-20241022\", { anthropicApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"anthropic:claude-3-5-haiku-20241022\", { anthropicApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n};\n\n/**\n * OpenAI-specific builder shortcuts with streaming support\n */\nexport const openai = {\n  /** GPT-4o - Latest and fastest */\n  gpt4o: (apiKey: string) => Object.assign(quick(\"openai:gpt-4o\", { openaiApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"openai:gpt-4o\", { openaiApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n\n  /** GPT-4o Mini - Cost-effective */\n  mini: (apiKey: string) => Object.assign(quick(\"openai:gpt-4o-mini\", { openaiApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"openai:gpt-4o-mini\", { openaiApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n\n  /** GPT-4 Turbo - High capability */\n  turbo: (apiKey: string) => Object.assign(quick(\"openai:gpt-4-turbo\", { openaiApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"openai:gpt-4-turbo\", { openaiApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n\n  /** GPT-3.5 Turbo - Fast and cheap */\n  gpt35: (apiKey: string) => Object.assign(quick(\"openai:gpt-3.5-turbo\", { openaiApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"openai:gpt-3.5-turbo\", { openaiApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n};\n\n/**\n * Groq-specific builder shortcuts with streaming support\n */\nexport const groq = {\n  /** Fastest model - 560 tokens/sec */\n  instant: (apiKey: string) => Object.assign(quick(\"groq:llama-3.1-8b-instant\", { groqApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"groq:llama-3.1-8b-instant\", { groqApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n\n  /** Balanced model - 280 tokens/sec */\n  versatile: (apiKey: string) => Object.assign(quick(\"groq:llama-3.3-70b-versatile\", { groqApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"groq:llama-3.3-70b-versatile\", { groqApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n\n  /** OpenAI OSS models */\n  gpt120b: (apiKey: string) => Object.assign(quick(\"groq:openai/gpt-oss-120b\", { groqApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"groq:openai/gpt-oss-120b\", { groqApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n\n  gpt20b: (apiKey: string) => Object.assign(quick(\"groq:openai/gpt-oss-20b\", { groqApiKey: apiKey }), {\n    stream: async (prompt: string): Promise<Stream<string>> => {\n      const builder = quick(\"groq:openai/gpt-oss-20b\", { groqApiKey: apiKey });\n      return builder.stream(prompt);\n    }\n  }),\n\n  /** Specialized models */\n  guard: (apiKey: string) => quick(\"groq:meta-llama/llama-guard-4-12b\", { groqApiKey: apiKey }),\n  compound: (apiKey: string) => quick(\"groq:groq/compound\", { groqApiKey: apiKey }),\n  compoundMini: (apiKey: string) => quick(\"groq:groq/compound-mini\", { groqApiKey: apiKey }),\n};\n\n/**\n * Gemini-specific builder shortcuts\n */\nexport const gemini = {\n  /** Latest Gemini 3 series */\n  pro3: (apiKey: string) => quick(\"gemini:gemini-3-pro-preview\", { geminiApiKey: apiKey }),\n  flash3: (apiKey: string) => quick(\"gemini:gemini-3-flash-preview\", { geminiApiKey: apiKey }),\n\n  /** Gemini 2.5 series */\n  pro25: (apiKey: string) => quick(\"gemini:gemini-2.5-pro\", { geminiApiKey: apiKey }),\n  flash25: (apiKey: string) => quick(\"gemini:gemini-2.5-flash\", { geminiApiKey: apiKey }),\n\n  /** Gemini 2.0 series (recommended) */\n  flash: (apiKey: string) => quick(\"gemini:gemini-2.0-flash\", { geminiApiKey: apiKey }),\n  lite: (apiKey: string) => quick(\"gemini:gemini-2.0-flash-lite\", { geminiApiKey: apiKey }),\n\n  /** Stable 1.5 series */\n  pro: (apiKey: string) => quick(\"gemini:gemini-1.5-pro-002\", { geminiApiKey: apiKey }),\n  flash15: (apiKey: string) => quick(\"gemini:gemini-1.5-flash-002\", { geminiApiKey: apiKey }),\n};\n\n/**\n * Cloudflare-specific builder shortcuts\n */\nexport const cloudflare = {\n  /** GPT-OSS 120B - Production use */\n  gpt120b: (creds: { apiKey: string; email: string; accountId: string }) =>\n    quick(\"cloudflare:@cf/openai/gpt-oss-120b\", {\n      cloudflareApiKey: creds.apiKey,\n      cloudflareEmail: creds.email,\n      cloudflareAccountId: creds.accountId,\n    }),\n\n  /** GPT-OSS 20B - Lower latency */\n  gpt20b: (creds: { apiKey: string; email: string; accountId: string }) =>\n    quick(\"cloudflare:@cf/openai/gpt-oss-20b\", {\n      cloudflareApiKey: creds.apiKey,\n      cloudflareEmail: creds.email,\n      cloudflareAccountId: creds.accountId,\n    }),\n\n  /** Llama 4 Scout - Multimodal */\n  llama4: (creds: { apiKey: string; email: string; accountId: string }) =>\n    quick(\"cloudflare:@cf/meta/llama-4-scout-17b-16e-instruct\", {\n      cloudflareApiKey: creds.apiKey,\n      cloudflareEmail: creds.email,\n      cloudflareAccountId: creds.accountId,\n    }),\n\n  /** Llama 3.3 70B - Fast quantized */\n  llama70b: (creds: { apiKey: string; email: string; accountId: string }) =>\n    quick(\"cloudflare:@cf/meta/llama-3.3-70b-instruct-fp8-fast\", {\n      cloudflareApiKey: creds.apiKey,\n      cloudflareEmail: creds.email,\n      cloudflareAccountId: creds.accountId,\n    }),\n\n  /** Llama 3.1 8B - Lightweight */\n  llama8b: (creds: { apiKey: string; email: string; accountId: string }) =>\n    quick(\"cloudflare:@cf/meta/llama-3.1-8b-instruct\", {\n      cloudflareApiKey: creds.apiKey,\n      cloudflareEmail: creds.email,\n      cloudflareAccountId: creds.accountId,\n    }),\n\n  /** QwQ 32B - Reasoning specialist */\n  reasoning: (creds: { apiKey: string; email: string; accountId: string }) =>\n    quick(\"cloudflare:@cf/qwen/qwq-32b\", {\n      cloudflareApiKey: creds.apiKey,\n      cloudflareEmail: creds.email,\n      cloudflareAccountId: creds.accountId,\n    }),\n\n  /** Qwen 2.5 Coder - Code specialist */\n  coder: (creds: { apiKey: string; email: string; accountId: string }) =>\n    quick(\"cloudflare:@cf/qwen/qwen2.5-coder-32b-instruct\", {\n      cloudflareApiKey: creds.apiKey,\n      cloudflareEmail: creds.email,\n      cloudflareAccountId: creds.accountId,\n    }),\n\n  /** IBM Granite - Enterprise */\n  granite: (creds: { apiKey: string; email: string; accountId: string }) =>\n    quick(\"cloudflare:@cf/ibm/granite-4.0-h-micro\", {\n      cloudflareApiKey: creds.apiKey,\n      cloudflareEmail: creds.email,\n      cloudflareAccountId: creds.accountId,\n    }),\n};\n","/**\n * Fluent Builder API for unillm\n *\n * Modern, type-safe, chainable interface for LLM operations\n * Inspired by Prisma, Playwright, and modern TypeScript patterns\n */\n\nimport type { z } from \"zod\";\nimport type { Stream } from \"@aid-on/nagare\";\nimport { stream as nagareStream } from \"@aid-on/nagare\";\nimport type { ModelSpec, Credentials, GenerateOptions, GenerateResult } from \"./types.js\";\nimport { generate, parseModelSpec } from \"./factory.js\";\nimport { generateObject as baseGenerateObject, extractJSON } from \"./structured.js\";\nimport { withRetry, type RetryConfig } from \"./retry.js\";\nimport { truncateMessages, compressMessage } from \"./memory.js\";\nimport { createProviderStream } from \"./fluent-streaming.js\";\n\n// =============================================================================\n// Core Builder Types\n// =============================================================================\n\ninterface FluentState {\n  model?: ModelSpec | string;\n  credentials?: Credentials;\n  messages?: Array<{ role: string; content: string }>;\n  system?: string;\n  temperature?: number;\n  maxTokens?: number;\n  retryConfig?: RetryConfig;\n  schema?: z.ZodType;\n}\n\n// =============================================================================\n// Fluent Builder Class\n// =============================================================================\n\nexport class UnillmBuilder {\n  private state: FluentState = {};\n\n  constructor(initialState: Partial<FluentState> = {}) {\n    this.state = { ...initialState };\n  }\n\n  model(spec: ModelSpec | string): UnillmBuilder {\n    return new UnillmBuilder({ ...this.state, model: spec });\n  }\n\n  credentials(creds: Credentials): UnillmBuilder {\n    return new UnillmBuilder({ ...this.state, credentials: creds });\n  }\n\n  /** Alias for credentials */\n  creds(creds: Credentials): UnillmBuilder { return this.credentials(creds); }\n\n  temperature(temp: number): UnillmBuilder {\n    return new UnillmBuilder({ ...this.state, temperature: temp });\n  }\n\n  /** Alias for temperature */\n  temp(temp: number): UnillmBuilder { return this.temperature(temp); }\n\n  maxTokens(tokens: number): UnillmBuilder {\n    return new UnillmBuilder({ ...this.state, maxTokens: tokens });\n  }\n\n  /** Alias for maxTokens */\n  tokens(tokens: number): UnillmBuilder { return this.maxTokens(tokens); }\n\n  system(prompt: string): UnillmBuilder {\n    return new UnillmBuilder({ ...this.state, system: prompt });\n  }\n\n  messages(msgs: Array<{ role: string; content: string }>): UnillmBuilder {\n    return new UnillmBuilder({ ...this.state, messages: msgs });\n  }\n\n  user(content: string): UnillmBuilder {\n    const messages = [...(this.state.messages || []), { role: \"user\", content }];\n    return new UnillmBuilder({ ...this.state, messages });\n  }\n\n  assistant(content: string): UnillmBuilder {\n    const messages = [...(this.state.messages || []), { role: \"assistant\", content }];\n    return new UnillmBuilder({ ...this.state, messages });\n  }\n\n  schema<T extends z.ZodType>(schema: T): UnillmStructuredBuilder<T> {\n    return new UnillmStructuredBuilder({ ...this.state, schema });\n  }\n\n  retry(config: RetryConfig): UnillmBuilder {\n    return new UnillmBuilder({ ...this.state, retryConfig: config });\n  }\n\n  retries(count: number, baseDelay = 1000): UnillmBuilder {\n    return this.retry({ maxRetries: count, baseDelay });\n  }\n\n  optimize(maxTokens = 4000): UnillmBuilder {\n    const messages = this.state.messages;\n    if (!messages) return this;\n    const optimized = truncateMessages(messages, maxTokens);\n    return new UnillmBuilder({ ...this.state, messages: optimized });\n  }\n\n  compress(): UnillmBuilder {\n    const messages = this.state.messages?.map(m => ({\n      ...m, content: compressMessage(m.content),\n    }));\n    return new UnillmBuilder({ ...this.state, messages });\n  }\n\n  // ===========================================================================\n  // Generation Methods\n  // ===========================================================================\n\n  async generate(prompt?: string): Promise<GenerateResult> {\n    this.validateRequired(prompt);\n    const messages = this.prepareMessages(prompt);\n    const options: GenerateOptions = {\n      temperature: this.state.temperature,\n      maxTokens: this.state.maxTokens,\n    };\n    const generateFn = () => generate(this.state.model!, messages, this.state.credentials!, options);\n    return this.state.retryConfig ? withRetry(generateFn, this.state.retryConfig) : generateFn();\n  }\n\n  async stream(prompt?: string): Promise<Stream<string>> {\n    this.validateRequired(prompt);\n    const messages = this.prepareMessages(prompt);\n    const { provider, model } = parseModelSpec(this.state.model!);\n    const readableStream = await createProviderStream({\n      provider, model, messages, credentials: this.state.credentials!,\n      options: { temperature: this.state.temperature, maxTokens: this.state.maxTokens },\n    });\n    return nagareStream.from(readableStream);\n  }\n\n  // ===========================================================================\n  // Private Helpers\n  // ===========================================================================\n\n  private prepareMessages(prompt?: string): Array<{ role: string; content: string }> {\n    let messages = this.state.messages || [];\n    if (this.state.system) {\n      messages = [{ role: \"system\", content: this.state.system }, ...messages];\n    }\n    if (prompt) {\n      messages = [...messages, { role: \"user\", content: prompt }];\n    }\n    return messages;\n  }\n\n  private validateRequired(prompt?: string): void {\n    if (!this.state.model) throw new Error(\"Model is required. Use .model('provider:model-name')\");\n    if (!this.state.credentials) throw new Error(\"Credentials are required. Use .credentials({ ... })\");\n    if (!prompt && (!this.state.messages || this.state.messages.length === 0)) {\n      throw new Error(\"At least one message is required. Use .user('...') or .messages([...]), or provide a prompt to generate()\");\n    }\n  }\n}\n\n// =============================================================================\n// Structured Output Builder\n// =============================================================================\n\nexport class UnillmStructuredBuilder<T extends z.ZodType> {\n  private state: FluentState & { schema: T };\n\n  constructor(state: FluentState & { schema: T }) {\n    this.state = state;\n  }\n\n  async generate(prompt: string): Promise<{ object: z.infer<T>; rawText: string; usage?: Record<string, unknown> }> {\n    if (!this.state.model || !this.state.credentials || !this.state.schema) {\n      throw new Error(\"Model, credentials, and schema are required for structured generation\");\n    }\n    return baseGenerateObject({\n      model: this.state.model,\n      credentials: this.state.credentials,\n      schema: this.state.schema,\n      prompt,\n      system: this.state.system,\n      temperature: this.state.temperature,\n      maxTokens: this.state.maxTokens,\n    });\n  }\n\n  extract(text: string): z.infer<T> {\n    if (!this.state.schema) throw new Error(\"Schema is required for extraction\");\n    return extractJSON(text, this.state.schema);\n  }\n}\n\n// =============================================================================\n// Factory Functions\n// =============================================================================\n\nexport function unillm(initialState?: Partial<FluentState>): UnillmBuilder {\n  return new UnillmBuilder(initialState);\n}\n\nexport function quick(model: ModelSpec | string, credentials: Credentials): UnillmBuilder {\n  return new UnillmBuilder({ model, credentials });\n}\n\n// Re-export provider shortcuts\nexport { groq, gemini, cloudflare, anthropic, openai } from \"./fluent-providers.js\";\n"]}