@absolutejs/ai 0.0.21 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/ai/providers/instrumentation.ts", "../src/ai/providers/reasoning.ts", "../src/ai/providers/openai.ts", "../src/ai/providers/openaiCompatible.ts", "../src/ai/providers/openaiResponses.ts", "../src/ai/providers/gemini.ts", "../src/ai/providers/anthropic.ts", "../src/ai/providers/ollama.ts", "../src/plugins/aiChat.ts", "../src/ai/memoryStore.ts", "../types/typeGuards.ts", "../src/ai/protocol.ts", "../src/ai/streamAI.ts", "../src/ai/streamAIToSSE.ts", "../src/constants.ts", "../src/ai/htmxRenderers.ts", "../src/ai/generateAI.ts", "../src/ai/conversationManager.ts", "../src/ai/syncConversationStore.ts", "../src/ai/client/actions.ts", "../src/ai/client/connection.ts", "../src/ai/client/messageStore.ts", "../src/ai/client/createAIStream.ts", "../src/ai/providers/oauth2TokenSource.ts"],
3
+ "sources": ["../src/ai/errors/providerError.ts", "../src/ai/resilience.ts", "../src/ai/providers/instrumentation.ts", "../src/ai/providers/reasoning.ts", "../src/ai/providers/openai.ts", "../src/ai/providers/openaiCompatible.ts", "../src/ai/providers/openaiResponses.ts", "../src/ai/providers/gemini.ts", "../src/ai/providers/anthropic.ts", "../src/ai/providers/ollama.ts", "../src/plugins/aiChat.ts", "../src/ai/memoryStore.ts", "../types/typeGuards.ts", "../src/ai/protocol.ts", "../src/ai/streamAI.ts", "../src/ai/streamAIToSSE.ts", "../src/constants.ts", "../src/ai/htmxRenderers.ts", "../src/ai/generateAI.ts", "../src/ai/conversationManager.ts", "../src/ai/syncConversationStore.ts", "../src/ai/client/actions.ts", "../src/ai/client/connection.ts", "../src/ai/client/messageStore.ts", "../src/ai/client/createAIStream.ts", "../src/ai/providers/oauth2TokenSource.ts", "../src/ai/providerStatusMonitor.ts"],
4
4
  "sourcesContent": [
5
- "import type {\n AIChunk,\n AIProviderConfig,\n AIProviderStreamParams,\n AIUsage,\n} from \"../../../types/ai\";\n\nexport const instrumentAIProvider = (\n provider: AIProviderConfig,\n providerName?: string,\n): AIProviderConfig => ({\n stream: (params: AIProviderStreamParams) => {\n if (!params.onUsage && !params.onSpan) {\n return provider.stream(params);\n }\n return tapStream(provider.stream(params), params, providerName);\n },\n});\n\nasync function* tapStream(\n source: AsyncIterable<AIChunk>,\n params: AIProviderStreamParams,\n providerName?: string,\n): AsyncIterable<AIChunk> {\n const startedAt = Date.now();\n let lastUsage: AIUsage | undefined;\n try {\n for await (const chunk of source) {\n if (chunk.type === \"done\" && chunk.usage) {\n lastUsage = chunk.usage;\n }\n yield chunk;\n }\n } finally {\n if (lastUsage && params.onUsage) {\n try {\n params.onUsage({\n ...lastUsage,\n model: params.model,\n provider: providerName,\n });\n } catch {\n // operator-supplied callback errors must not affect stream consumers\n }\n }\n if (params.onSpan) {\n try {\n params.onSpan({\n durationMs: Date.now() - startedAt,\n model: params.model,\n provider: providerName,\n usage: lastUsage,\n });\n } catch {\n // same\n }\n }\n }\n}\n",
5
+ "// Structured provider error. Replaces the previous `throw new Error(\"Anthropic\n// API error 529: ...\")` strings so consumers can classify outages\n// programmatically (retryable? which provider? what status?) instead of parsing\n// message text. Surfaced both by the retry/circuit-breaker layer and to end\n// callers via `instanceof ProviderError`.\n\n// Public status pages (also serve the Atlassian Statuspage JSON API at\n// /api/v2/*), keyed by the provider name passed to the factories. Anthropic\n// moved theirs to status.claude.com — status.anthropic.com only HTTP-redirects,\n// which breaks JSON polling, so we point at the canonical host.\nexport const PROVIDER_STATUS_PAGES: Record<string, string> = {\n anthropic: \"https://status.claude.com\",\n gemini: \"https://status.cloud.google.com\",\n google: \"https://status.cloud.google.com\",\n openai: \"https://status.openai.com\",\n};\n\n// HTTP statuses that mean \"the provider is unavailable / overloaded / rate\n// limited\", i.e. retrying later may succeed — NOT a malformed request. 529 is\n// Anthropic's \"overloaded\". 4xx auth/validation (400/401/403/404/422) are\n// deliberately excluded: those are the caller's fault and never self-heal.\nconst RETRYABLE_STATUSES = new Set([\n 408, 409, 425, 429, 500, 502, 503, 504, 529,\n]);\n\n// Connection-level failure fingerprints (fetch rejects before any HTTP status).\nconst CONNECTION_ERROR_PATTERNS = [\n \"econnreset\",\n \"econnrefused\",\n \"etimedout\",\n \"enotfound\",\n \"eai_again\",\n \"socket hang up\",\n \"fetch failed\",\n \"network\",\n \"terminated\",\n \"timed out\",\n \"timeout\",\n \"and not retryable\",\n \"no response body\",\n];\n\nconst isAbortError = (err: unknown): boolean =>\n err instanceof Error &&\n (err.name === \"AbortError\" || /\\babort(ed)?\\b/i.test(err.message));\n\n/** Public status page for a provider, or null when we don't track one. */\nexport const providerStatusPage = (provider: string): string | null =>\n PROVIDER_STATUS_PAGES[provider] ?? null;\n\nexport type ProviderErrorInit = {\n provider: string;\n message: string;\n status?: number | null;\n /** Provider-specific error type, e.g. Anthropic's \"overloaded_error\". */\n type?: string | null;\n retryable: boolean;\n cause?: unknown;\n};\n\nexport class ProviderError extends Error {\n readonly provider: string;\n /** HTTP status when the failure carried one; null for connection errors. */\n readonly status: number | null;\n readonly type: string | null;\n /** Whether retrying the same request later could plausibly succeed. */\n readonly retryable: boolean;\n /** Provider status page, when known — for surfacing \"is it them?\" to users. */\n readonly statusPageUrl: string | null;\n\n constructor(init: ProviderErrorInit) {\n super(\n init.message,\n init.cause === undefined ? undefined : { cause: init.cause },\n );\n this.name = \"ProviderError\";\n this.provider = init.provider;\n this.status = init.status ?? null;\n this.type = init.type ?? null;\n this.retryable = init.retryable;\n this.statusPageUrl = providerStatusPage(init.provider);\n }\n\n /** Build from a non-2xx HTTP response (status + body text are known). */\n static fromResponse(\n provider: string,\n status: number,\n body: string,\n type?: string | null,\n ): ProviderError {\n return new ProviderError({\n message: `${capitalize(provider)} API error ${status}: ${body}`,\n provider,\n retryable: RETRYABLE_STATUSES.has(status),\n status,\n type: type ?? null,\n });\n }\n\n /**\n * Normalize any thrown value into a ProviderError. Passes existing\n * ProviderErrors through unchanged; classifies connection errors and\n * status-bearing message strings; rethrows aborts to the caller (an aborted\n * request is the caller's intent, never a provider outage).\n */\n static from(err: unknown, provider: string): ProviderError {\n if (err instanceof ProviderError) return err;\n if (isAbortError(err)) throw err;\n\n const rawMessage = err instanceof Error ? err.message : String(err ?? \"\");\n const lower = rawMessage.toLowerCase();\n\n const statusMatch = lower.match(/api error\\s+(\\d{3})/);\n const status = statusMatch ? Number(statusMatch[1]) : null;\n\n const retryable =\n (status !== null && RETRYABLE_STATUSES.has(status)) ||\n (status === null &&\n CONNECTION_ERROR_PATTERNS.some((pattern) => lower.includes(pattern)));\n\n return new ProviderError({\n cause: err,\n message: rawMessage || `${capitalize(provider)} request failed`,\n provider,\n retryable,\n status,\n });\n }\n}\n\nconst capitalize = (value: string): string =>\n value.charAt(0).toUpperCase() + value.slice(1);\n",
6
+ "import type {\n AIChunk,\n AIProviderConfig,\n AIProviderStreamParams,\n} from \"../../types/ai\";\nimport { ProviderError, providerStatusPage } from \"./errors/providerError\";\n\n// Resilience layer wrapped around every provider (via instrumentAIProvider).\n// Two behaviours, both automatic:\n//\n// 1. Bounded retry with exponential backoff on TRANSIENT failures that happen\n// before any chunk is emitted (connection drops, 429/5xx/529). Retrying is\n// only safe pre-first-chunk — once text has streamed to the consumer a retry\n// would duplicate output, so mid-stream failures are surfaced, never retried.\n//\n// 2. A per-provider circuit breaker. After enough consecutive request failures\n// the circuit OPENS and further calls fail fast (no hammering a provider\n// that's down) until a cooldown elapses, then a single half-open probe\n// decides whether to close. State is exposed via getProviderHealth().\n//\n// NOTE: state is per-process. Across multiple server instances each process\n// keeps its own view — this is best-effort local protection, not a distributed\n// breaker. Authoritative \"is the provider down\" should come from their status\n// page; this just stops one process from flogging a dead endpoint.\n\nexport type ResilienceConfig = {\n /** Max retry attempts AFTER the first try (so total tries = maxRetries + 1). */\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n /** Consecutive failed requests before the circuit opens. */\n failureThreshold: number;\n /** How long the circuit stays open before allowing a half-open probe. */\n openMs: number;\n};\n\nconst DEFAULT_CONFIG: ResilienceConfig = {\n baseDelayMs: 500,\n failureThreshold: 4,\n maxDelayMs: 8000,\n maxRetries: 2,\n openMs: 30_000,\n};\n\nlet config: ResilienceConfig = { ...DEFAULT_CONFIG };\n\n/** Override the global resilience defaults (retry counts, breaker thresholds). */\nexport const configureProviderResilience = (\n partial: Partial<ResilienceConfig>,\n): void => {\n config = { ...config, ...partial };\n};\n\ntype CircuitState = \"closed\" | \"open\" | \"half-open\";\n\n// Externally-supplied availability (e.g. from a status-page monitor). When a\n// provider's API is reported down, the breaker trips PROACTIVELY — no warmup of\n// real user-facing failures needed.\ntype ExternalStatus = {\n available: boolean;\n /** Statuspage indicator, e.g. \"major_outage\" | \"operational\" | \"unknown\". */\n indicator: string;\n reason: string;\n checkedAt: number;\n};\n\ntype HealthRecord = {\n state: CircuitState;\n consecutiveFailures: number;\n lastFailureAt: number | null;\n lastSuccessAt: number | null;\n nextProbeAt: number | null;\n lastError: {\n status: number | null;\n type: string | null;\n message: string;\n } | null;\n external: ExternalStatus | null;\n};\n\nconst health = new Map<string, HealthRecord>();\n\nconst recordFor = (provider: string): HealthRecord => {\n const existing = health.get(provider);\n if (existing) return existing;\n const fresh: HealthRecord = {\n consecutiveFailures: 0,\n external: null,\n lastError: null,\n lastFailureAt: null,\n lastSuccessAt: null,\n nextProbeAt: null,\n state: \"closed\",\n };\n health.set(provider, fresh);\n\n return fresh;\n};\n\n/**\n * Feed externally-observed provider availability (typically from a status-page\n * monitor) into the breaker. A report of `available: false` makes the provider\n * fail fast immediately; `available: true` clears the external block (the\n * reactive breaker still governs real failures).\n */\nexport const setProviderAvailability = (\n provider: string,\n status: { available: boolean; indicator?: string; reason?: string },\n): void => {\n const record = recordFor(provider);\n record.external = {\n available: status.available,\n checkedAt: Date.now(),\n indicator:\n status.indicator ?? (status.available ? \"operational\" : \"unknown\"),\n reason: status.reason ?? \"\",\n };\n};\n\nconst noteSuccess = (provider: string): void => {\n const record = recordFor(provider);\n record.state = \"closed\";\n record.consecutiveFailures = 0;\n record.nextProbeAt = null;\n record.lastError = null;\n record.lastSuccessAt = Date.now();\n};\n\nconst noteFailure = (provider: string, error: ProviderError): void => {\n const record = recordFor(provider);\n record.consecutiveFailures += 1;\n record.lastFailureAt = Date.now();\n record.lastError = {\n message: error.message,\n status: error.status,\n type: error.type,\n };\n if (record.consecutiveFailures >= config.failureThreshold) {\n record.state = \"open\";\n record.nextProbeAt = Date.now() + config.openMs;\n }\n};\n\nexport type ProviderHealth = {\n provider: string;\n /**\n * True when the provider is usable: circuit closed AND not reported down by\n * an external status monitor.\n */\n healthy: boolean;\n state: CircuitState;\n consecutiveFailures: number;\n lastFailureAt: number | null;\n lastSuccessAt: number | null;\n /** When the breaker will next allow a probe (epoch ms), if open. */\n nextRetryAt: number | null;\n lastError: {\n status: number | null;\n type: string | null;\n message: string;\n } | null;\n statusPageUrl: string | null;\n /** Latest externally-observed status (e.g. status page), if any. */\n external: ExternalStatus | null;\n};\n\nconst snapshot = (provider: string, record: HealthRecord): ProviderHealth => ({\n consecutiveFailures: record.consecutiveFailures,\n external: record.external,\n healthy: record.state === \"closed\" && record.external?.available !== false,\n lastError: record.lastError,\n lastFailureAt: record.lastFailureAt,\n lastSuccessAt: record.lastSuccessAt,\n nextRetryAt: record.nextProbeAt,\n provider,\n state: record.state,\n statusPageUrl: providerStatusPage(provider),\n});\n\n/**\n * Inspect provider health as tracked by the circuit breaker. Pass a provider\n * name for one snapshot, or omit to get every provider seen this process.\n */\nexport function getProviderHealth(provider: string): ProviderHealth;\nexport function getProviderHealth(): ProviderHealth[];\nexport function getProviderHealth(\n provider?: string,\n): ProviderHealth | ProviderHealth[] {\n if (provider !== undefined) return snapshot(provider, recordFor(provider));\n\n return [...health.entries()].map(([name, record]) => snapshot(name, record));\n}\n\nconst backoffDelay = (attempt: number): number => {\n const exponential = config.baseDelayMs * 2 ** attempt;\n const capped = Math.min(exponential, config.maxDelayMs);\n // Full jitter: spread retries so concurrent callers don't reconnect in lockstep.\n return Math.round(capped / 2 + (Math.random() * capped) / 2);\n};\n\nconst sleep = (ms: number, signal?: AbortSignal): Promise<void> =>\n new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason ?? new Error(\"aborted\"));\n\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal?.reason ?? new Error(\"aborted\"));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n\nconst circuitOpen = (provider: string): ProviderError | null => {\n const record = recordFor(provider);\n\n // Proactive trip: an external monitor (status page) reported the API down, so\n // fail fast without waiting to accumulate real user-facing failures.\n if (record.external && !record.external.available) {\n return new ProviderError({\n message: `${provider} API is reported down${record.external.reason ? `: ${record.external.reason}` : \"\"}`,\n provider,\n retryable: true,\n status: null,\n type: record.external.indicator,\n });\n }\n\n if (record.state !== \"open\") return null;\n if (record.nextProbeAt !== null && Date.now() >= record.nextProbeAt) {\n // Cooldown elapsed: allow a single probe through.\n record.state = \"half-open\";\n\n return null;\n }\n const detail = record.lastError?.message ?? \"recent failures\";\n\n return new ProviderError({\n message: `${provider} is temporarily unavailable (circuit open after ${record.consecutiveFailures} failures): ${detail}`,\n provider,\n retryable: true,\n status: record.lastError?.status ?? null,\n type: record.lastError?.type ?? null,\n });\n};\n\n/**\n * Wrap a provider with retry + circuit-breaker behaviour. The returned config\n * has the same `stream(params) => AsyncIterable<AIChunk>` shape.\n */\nexport const withResilience = (\n provider: AIProviderConfig,\n providerName = \"unknown\",\n): AIProviderConfig => {\n const attempt = async function* (\n params: AIProviderStreamParams,\n attemptNo: number,\n ): AsyncIterable<AIChunk> {\n let yielded = false;\n try {\n for await (const chunk of provider.stream(params)) {\n yielded = true;\n yield chunk;\n }\n noteSuccess(providerName);\n } catch (err) {\n // Aborts are the caller's intent — propagate without touching health.\n const providerError = ProviderError.from(err, providerName);\n const canRetry =\n !yielded &&\n providerError.retryable &&\n attemptNo < config.maxRetries &&\n !params.signal?.aborted;\n\n if (canRetry) {\n await sleep(backoffDelay(attemptNo), params.signal);\n yield* attempt(params, attemptNo + 1);\n\n return;\n }\n\n noteFailure(providerName, providerError);\n throw providerError;\n }\n };\n\n return {\n stream: (params: AIProviderStreamParams) => {\n // Fail fast while the breaker is open — don't count this as a new failure\n // (no request was made); nextProbeAt already governs the cooldown.\n const tripped = circuitOpen(providerName);\n if (tripped) {\n return (async function* () {\n throw tripped;\n })();\n }\n\n return attempt(params, 0);\n },\n };\n};\n",
7
+ "import type {\n AIChunk,\n AIProviderConfig,\n AIProviderStreamParams,\n AIUsage,\n} from \"../../../types/ai\";\nimport { withResilience } from \"../resilience\";\n\n// Every provider factory routes through here, so this is also where the\n// automatic retry + circuit-breaker layer is applied — wrapping the raw provider\n// BENEATH the usage/span tap so onUsage/onSpan fire once, for the attempt that\n// actually streamed.\nexport const instrumentAIProvider = (\n provider: AIProviderConfig,\n providerName?: string,\n): AIProviderConfig => {\n const resilient = withResilience(provider, providerName);\n\n return {\n stream: (params: AIProviderStreamParams) => {\n if (!params.onUsage && !params.onSpan) {\n return resilient.stream(params);\n }\n return tapStream(resilient.stream(params), params, providerName);\n },\n };\n};\n\nasync function* tapStream(\n source: AsyncIterable<AIChunk>,\n params: AIProviderStreamParams,\n providerName?: string,\n): AsyncIterable<AIChunk> {\n const startedAt = Date.now();\n let lastUsage: AIUsage | undefined;\n try {\n for await (const chunk of source) {\n if (chunk.type === \"done\" && chunk.usage) {\n lastUsage = chunk.usage;\n }\n yield chunk;\n }\n } finally {\n if (lastUsage && params.onUsage) {\n try {\n params.onUsage({\n ...lastUsage,\n model: params.model,\n provider: providerName,\n });\n } catch {\n // operator-supplied callback errors must not affect stream consumers\n }\n }\n if (params.onSpan) {\n try {\n params.onSpan({\n durationMs: Date.now() - startedAt,\n model: params.model,\n provider: providerName,\n usage: lastUsage,\n });\n } catch {\n // same\n }\n }\n }\n}\n",
6
8
  "// Provider-agnostic reasoning translation. Consumers set one portable knob —\n// `reasoning: { effort }` — and each provider maps it to the wire shape the\n// NAMED MODEL accepts. This is where the per-model API divergence lives:\n//\n// - Modern Anthropic (Opus 4.5–4.8, Sonnet 4.6, Fable/Mythos 5): adaptive\n// thinking + `output_config.effort`. `budget_tokens` 400s here.\n// - Haiku 4.5: adaptive thinking only (no `effort`).\n// - Legacy Anthropic (Sonnet 4.5/4, Opus 4/4.1, 3.7 Sonnet): extended\n// thinking with `budget_tokens`. `output_config.effort` 400s here.\n// - OpenAI reasoning models (o-series, GPT-5): `reasoning.effort`. Non-reasoning\n// models (gpt-4.1, gpt-4o) have no effort dial — ignored.\n// - Gemini 2.5: `thinkingConfig.thinkingBudget`.\n//\n// Model classification is by ID pattern (a Models-API capability lookup would be\n// a network round-trip per request). THIS TABLE IS THE MAINTENANCE POINT — add\n// new model families here as they ship.\n\nimport type { ReasoningConfig, ReasoningEffort } from \"../../../types/ai\";\n\nconst EFFORT_ORDER: ReasoningEffort[] = [\n \"minimal\",\n \"low\",\n \"medium\",\n \"high\",\n \"max\",\n];\n\n// Anthropic models that take adaptive thinking + output_config.effort.\nconst ANTHROPIC_EFFORT = [\n /opus-4-[5-8]/,\n /sonnet-4-6/,\n /fable-5/,\n /mythos-5/,\n];\n// Anthropic models with adaptive thinking but NO effort parameter. Reserved:\n// only add a model here once it's CONFIRMED to accept adaptive thinking without\n// `output_config.effort`. Unconfirmed models fall through to \"none\" (no-op) so\n// we never risk a 400 — Haiku 4.5, for instance, rejects `effort` and is not\n// confirmed for adaptive, so it stays out.\nconst ANTHROPIC_ADAPTIVE_ONLY: RegExp[] = [];\n// Anthropic models that use legacy extended thinking (budget_tokens).\nconst ANTHROPIC_LEGACY_THINKING = [\n /sonnet-4-5/,\n /sonnet-4-0/,\n /sonnet-4-2025/,\n /opus-4-0/,\n /opus-4-1/,\n /opus-4-2025/,\n /3-7-sonnet/,\n];\n// Anthropic models that REMOVED temperature/top_p/top_k (sending them 400s).\nconst ANTHROPIC_NO_SAMPLING = [/opus-4-[78]/, /fable-5/, /mythos-5/];\n// Anthropic models that support the `max` effort tier (others clamp max→high).\nconst ANTHROPIC_MAX_EFFORT = [\n /opus-4-[678]/,\n /sonnet-4-6/,\n /fable-5/,\n /mythos-5/,\n];\n// OpenAI reasoning models (effort-capable); everything else ignores effort.\nconst OPENAI_REASONING = [/(^|[^a-z])o[1345](-|$)/, /gpt-5/];\n// OpenAI reasoning models that support the `minimal` tier (others clamp →low).\nconst OPENAI_MINIMAL_EFFORT = [/gpt-5/];\n\nconst matches = (model: string, patterns: RegExp[]) =>\n patterns.some((pattern) => pattern.test(model));\n\nexport type AnthropicReasoningMode = \"effort\" | \"adaptive\" | \"legacy\" | \"none\";\n\nexport const anthropicReasoningMode = (model: string): AnthropicReasoningMode => {\n if (matches(model, ANTHROPIC_EFFORT)) return \"effort\";\n if (matches(model, ANTHROPIC_ADAPTIVE_ONLY)) return \"adaptive\";\n if (matches(model, ANTHROPIC_LEGACY_THINKING)) return \"legacy\";\n\n return \"none\";\n};\n\n/** Modern Anthropic + Fable/Mythos reject temperature/top_p/top_k entirely. */\nexport const anthropicSupportsSampling = (model: string) =>\n !matches(model, ANTHROPIC_NO_SAMPLING);\n\nexport const isOpenAIReasoningModel = (model: string) =>\n matches(model, OPENAI_REASONING);\n\n// effort → legacy thinking budget (tokens). Kept under typical max_tokens; the\n// Anthropic provider raises max_tokens to fit when thinking is enabled.\nconst EFFORT_BUDGET: Record<ReasoningEffort, number> = {\n high: 16384,\n low: 2048,\n max: 32768,\n medium: 8192,\n minimal: 1024,\n};\n\n// budget tokens → nearest effort (when a caller gave only budgetTokens but the\n// target model is effort-based).\nconst budgetToEffort = (budget: number): ReasoningEffort => {\n if (budget <= 2048) return \"low\";\n if (budget <= 8192) return \"medium\";\n if (budget <= 16384) return \"high\";\n\n return \"max\";\n};\n\n/** The portable effort a config asks for, deriving from budgetTokens if needed. */\nexport const resolveEffort = (\n reasoning: ReasoningConfig,\n): ReasoningEffort | null => {\n if (reasoning.effort) return reasoning.effort;\n if (typeof reasoning.budgetTokens === \"number\") {\n return budgetToEffort(reasoning.budgetTokens);\n }\n\n return null;\n};\n\n/** The budget a config asks for, deriving from effort if needed. */\nexport const resolveBudgetTokens = (\n reasoning: ReasoningConfig,\n): number | null => {\n if (typeof reasoning.budgetTokens === \"number\") return reasoning.budgetTokens;\n if (reasoning.effort) return EFFORT_BUDGET[reasoning.effort];\n\n return null;\n};\n\nconst clampEffort = (\n effort: ReasoningEffort,\n allowed: ReasoningEffort[],\n): ReasoningEffort => {\n if (allowed.includes(effort)) return effort;\n // Walk DOWN the order to the nearest allowed tier (never silently escalate).\n const idx = EFFORT_ORDER.indexOf(effort);\n for (let lower = idx - 1; lower >= 0; lower -= 1) {\n const candidate = EFFORT_ORDER[lower];\n if (candidate && allowed.includes(candidate)) return candidate;\n }\n\n return allowed[0] ?? effort;\n};\n\n/** Anthropic `output_config.effort` value for an effort-capable model, or null. */\nexport const anthropicEffortValue = (\n model: string,\n reasoning: ReasoningConfig,\n) => {\n const effort = resolveEffort(reasoning);\n if (!effort) return null;\n const allowed: ReasoningEffort[] = matches(model, ANTHROPIC_MAX_EFFORT)\n ? [\"low\", \"medium\", \"high\", \"max\"]\n : [\"low\", \"medium\", \"high\"];\n\n return clampEffort(effort, allowed);\n};\n\n/** OpenAI `reasoning.effort` value for a reasoning model, or null. */\nexport const openaiEffortValue = (model: string, reasoning: ReasoningConfig) => {\n if (!isOpenAIReasoningModel(model)) return null;\n const effort = resolveEffort(reasoning);\n if (!effort) return null;\n const allowed: ReasoningEffort[] = matches(model, OPENAI_MINIMAL_EFFORT)\n ? [\"minimal\", \"low\", \"medium\", \"high\"]\n : [\"low\", \"medium\", \"high\"];\n // OpenAI has no `max`; clamp it to `high`.\n const requested = effort === \"max\" ? \"high\" : effort;\n\n return clampEffort(requested, allowed);\n};\n",
7
- "import type {\n AIProviderConfig,\n AIProviderContentBlock,\n AIProviderMessage,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n AIUsage,\n} from \"../../../types/ai\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// The `protocol` option lands in @types/bun 1.3.14; widen locally for now.\nimport { instrumentAIProvider } from \"./instrumentation\";\nimport { isOpenAIReasoningModel, openaiEffortValue } from \"./reasoning\";\n// Hard-skip on non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\n\ntype OpenAIConfig = {\n apiKey?: string;\n baseUrl?: string;\n tokenSource?: () => Promise<string> | string;\n};\n\ntype OpenAIMessage = {\n content: string | Array<Record<string, unknown>> | null;\n role: \"user\" | \"assistant\" | \"system\" | \"tool\";\n tool_call_id?: string;\n tool_calls?: Array<{\n function: { arguments: string; name: string };\n id: string;\n type: \"function\";\n }>;\n};\n\ntype PendingToolCall = {\n arguments: string;\n id: string;\n name: string;\n};\n\ntype UsageRef = {\n current: AIUsage | undefined;\n};\n\ntype StreamState = {\n buffer: string;\n pendingToolCalls: Map<number, PendingToolCall>;\n usageRef: UsageRef;\n};\n\nconst DEFAULT_BASE_URL = \"https://api.openai.com\";\nconst SSE_DATA_PREFIX_LENGTH = 6;\nconst DONE_SENTINEL = \"[DONE]\";\nconst NOT_FOUND = -1;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst isRecordArray = (\n value: unknown,\n): value is Array<Record<string, unknown>> =>\n Array.isArray(value) && value.length > 0 && isRecord(value[0]);\n\nconst hasArrayContent = (\n msg: AIProviderMessage,\n): msg is AIProviderMessage & { content: AIProviderContentBlock[] } =>\n typeof msg.content !== \"string\" && Array.isArray(msg.content);\n\nconst buildToolMessages = (blocks: AIProviderContentBlock[]) => {\n const toolUseBlocks = blocks.filter((block) => block.type === \"tool_use\");\n const toolResultBlocks = blocks.filter(\n (block) => block.type === \"tool_result\",\n );\n const messages: OpenAIMessage[] = [];\n\n if (toolUseBlocks.length > 0) {\n messages.push({\n content: null,\n role: \"assistant\",\n tool_calls: toolUseBlocks.map((block) => ({\n function: {\n arguments:\n typeof block.input === \"string\"\n ? block.input\n : JSON.stringify(block.input),\n name: block.name,\n },\n id: block.id,\n type: \"function\" as const,\n })),\n });\n }\n\n for (const result of toolResultBlocks) {\n messages.push({\n content: typeof result.content === \"string\" ? result.content : \"\",\n role: \"tool\",\n tool_call_id: result.tool_use_id,\n });\n }\n\n return messages;\n};\n\nconst processMessageAtIndex = (\n result: OpenAIMessage[],\n msg: AIProviderMessage,\n idx: number,\n) => {\n if (!hasArrayContent(msg)) {\n return;\n }\n\n const hasToolBlocks = msg.content.some(\n (block) => block.type === \"tool_use\" || block.type === \"tool_result\",\n );\n\n if (!hasToolBlocks) {\n return;\n }\n\n const toolMessages = buildToolMessages(msg.content);\n result.splice(idx, 1, ...toolMessages);\n};\n\nconst convertSingleMessage = (\n result: OpenAIMessage[],\n msg: AIProviderMessage | undefined,\n idx: number,\n) => {\n if (!msg) {\n return;\n }\n\n processMessageAtIndex(result, msg, idx);\n};\n\nconst convertToolResultMessages = (\n messages: OpenAIMessage[],\n params: AIProviderStreamParams,\n) => {\n const result = [...messages];\n\n for (let idx = 0; idx < params.messages.length; idx++) {\n convertSingleMessage(result, params.messages[idx], idx);\n }\n\n return result;\n};\n\nconst mapToolDefinitions = (tools: AIProviderToolDefinition[]) =>\n tools.map((tool) => ({\n function: {\n description: tool.description,\n name: tool.name,\n parameters: tool.input_schema,\n },\n type: \"function\",\n }));\n\nconst mapContentBlockToOpenAI = (block: AIProviderContentBlock) => {\n if (block.type === \"image\") {\n return {\n image_url: {\n url: `data:${block.source.media_type};base64,${block.source.data}`,\n },\n type: \"image_url\",\n };\n }\n\n if (block.type === \"document\") {\n return {\n file: {\n file_data: `data:${block.source.media_type};base64,${block.source.data}`,\n filename: block.name ?? \"document.pdf\",\n },\n type: \"file\",\n };\n }\n\n if (block.type === \"text\") {\n return { text: block.content, type: \"text\" };\n }\n\n return null;\n};\n\nconst mapOpenAIContent = (msg: AIProviderStreamParams[\"messages\"][number]) => {\n if (typeof msg.content === \"string\") {\n return msg.content;\n }\n\n const hasMedia = msg.content.some(\n (block) => block.type === \"image\" || block.type === \"document\",\n );\n\n if (!hasMedia) {\n return null;\n }\n\n return msg.content\n .map(mapContentBlockToOpenAI)\n .filter((mapped) => mapped !== null);\n};\n\nconst buildRequestBody = (params: AIProviderStreamParams) => {\n const messages = convertToolResultMessages(\n params.messages.map((msg) => ({\n content: mapOpenAIContent(msg),\n role: msg.role,\n })),\n params,\n );\n\n const body: Record<string, unknown> = {\n messages,\n model: params.model,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n if (params.tools && params.tools.length > 0) {\n body.tools = mapToolDefinitions(params.tools);\n if (params.toolChoice === \"auto\" || params.toolChoice === \"none\" || params.toolChoice === \"required\") {\n body.tool_choice = params.toolChoice;\n } else if (params.toolChoice && typeof params.toolChoice === \"object\") {\n body.tool_choice = {\n function: { name: params.toolChoice.name },\n type: \"function\",\n };\n }\n if (typeof params.parallelToolCalls === \"boolean\") {\n body.parallel_tool_calls = params.parallelToolCalls;\n }\n }\n\n // Reasoning models (o-series, GPT-5) reject temperature/top_p and use\n // `max_completion_tokens`; they take a `reasoning_effort` dial instead. Other\n // models take the usual sampling params and ignore reasoning.\n if (isOpenAIReasoningModel(params.model)) {\n if (typeof params.maxTokens === \"number\") {\n body.max_completion_tokens = params.maxTokens;\n }\n if (params.reasoning) {\n const effort = openaiEffortValue(params.model, params.reasoning);\n if (effort) body.reasoning_effort = effort;\n }\n } else {\n if (typeof params.temperature === \"number\") {\n body.temperature = params.temperature;\n }\n if (typeof params.topP === \"number\") body.top_p = params.topP;\n if (typeof params.maxTokens === \"number\") body.max_tokens = params.maxTokens;\n }\n if (params.stopSequences && params.stopSequences.length > 0) body.stop = params.stopSequences;\n if (typeof params.seed === \"number\") body.seed = params.seed;\n if (typeof params.frequencyPenalty === \"number\") body.frequency_penalty = params.frequencyPenalty;\n if (typeof params.presencePenalty === \"number\") body.presence_penalty = params.presencePenalty;\n\n if (params.responseFormat) {\n if (params.responseFormat.type === \"text\" || params.responseFormat.type === \"json_object\") {\n body.response_format = { type: params.responseFormat.type };\n } else if (params.responseFormat.type === \"json_schema\") {\n body.response_format = {\n json_schema: {\n name: params.responseFormat.name,\n schema: params.responseFormat.schema,\n strict: params.responseFormat.strict ?? true,\n },\n type: \"json_schema\",\n };\n }\n }\n\n return body;\n};\n\nconst parseToolInput = (rawArguments: string) => {\n try {\n return JSON.parse(rawArguments);\n } catch {\n return rawArguments;\n }\n};\n\nconst flushPendingToolCalls = function* (\n pendingToolCalls: Map<number, PendingToolCall>,\n) {\n for (const [, tool] of pendingToolCalls) {\n const input = parseToolInput(tool.arguments);\n yield {\n id: tool.id,\n input,\n name: tool.name,\n type: \"tool_use\" as const,\n };\n }\n\n pendingToolCalls.clear();\n};\n\nconst extractUsage = (parsedUsage: Record<string, number>) => ({\n inputTokens: parsedUsage.prompt_tokens ?? 0,\n outputTokens: parsedUsage.completion_tokens ?? 0,\n});\n\nconst resolveToolCallIndex = (toolCall: Record<string, unknown>) => {\n const raw = typeof toolCall.index === \"number\" ? toolCall.index : NOT_FOUND;\n\n return raw < 0 ? undefined : raw;\n};\n\nconst initPendingToolCall = (\n toolCall: Record<string, unknown>,\n func: Record<string, unknown> | null,\n index: number,\n pendingToolCalls: Map<number, PendingToolCall>,\n) => {\n if (pendingToolCalls.has(index)) {\n return;\n }\n\n const toolId = typeof toolCall.id === \"string\" ? toolCall.id : \"\";\n const toolName = func && typeof func.name === \"string\" ? func.name : \"\";\n\n pendingToolCalls.set(index, {\n arguments: \"\",\n id: toolId,\n name: toolName,\n });\n};\n\nconst updatePendingToolCall = (\n toolCall: Record<string, unknown>,\n func: Record<string, unknown> | null,\n pending: PendingToolCall,\n) => {\n if (typeof toolCall.id === \"string\") {\n pending.id = toolCall.id;\n }\n\n if (func && typeof func.name === \"string\") {\n pending.name = func.name;\n }\n\n if (func && typeof func.arguments === \"string\") {\n pending.arguments += func.arguments;\n }\n};\n\nconst processToolCallDelta = (\n toolCall: Record<string, unknown>,\n pendingToolCalls: Map<number, PendingToolCall>,\n) => {\n const index = resolveToolCallIndex(toolCall);\n if (index === undefined) {\n return;\n }\n\n const func = isRecord(toolCall.function) ? toolCall.function : null;\n initPendingToolCall(toolCall, func, index, pendingToolCalls);\n\n const pending = pendingToolCalls.get(index);\n if (!pending) {\n return;\n }\n\n updatePendingToolCall(toolCall, func, pending);\n};\n\nconst processToolCallDeltas = (\n toolCalls: Array<Record<string, unknown>>,\n pendingToolCalls: Map<number, PendingToolCall>,\n) => {\n for (const toolCall of toolCalls) {\n processToolCallDelta(toolCall, pendingToolCalls);\n }\n};\n\nconst processDelta = function* (\n delta: Record<string, unknown>,\n pendingToolCalls: Map<number, PendingToolCall>,\n) {\n if (typeof delta.content === \"string\") {\n yield { content: delta.content, type: \"text\" as const };\n }\n\n if (isRecordArray(delta.tool_calls)) {\n processToolCallDeltas(delta.tool_calls, pendingToolCalls);\n }\n};\n\nconst processChoice = function* (\n choice: Record<string, unknown>,\n pendingToolCalls: Map<number, PendingToolCall>,\n) {\n const delta = isRecord(choice.delta) ? choice.delta : null;\n if (delta) {\n yield* processDelta(delta, pendingToolCalls);\n }\n\n if (choice.finish_reason === \"tool_calls\") {\n yield* flushPendingToolCalls(pendingToolCalls);\n }\n};\n\nconst narrowUsageRecord = (parsed: Record<string, unknown>) => {\n if (!isRecord(parsed.usage)) {\n return undefined;\n }\n\n const { usage } = parsed;\n const promptTokens =\n typeof usage.prompt_tokens === \"number\" ? usage.prompt_tokens : 0;\n const completionTokens =\n typeof usage.completion_tokens === \"number\" ? usage.completion_tokens : 0;\n\n return extractUsage({\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n });\n};\n\nconst processSSELine = function* (\n line: string,\n pendingToolCalls: Map<number, PendingToolCall>,\n currentUsage: AIUsage | undefined,\n) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith(\"data: \")) {\n return;\n }\n\n const data = trimmed.slice(SSE_DATA_PREFIX_LENGTH);\n if (data === DONE_SENTINEL) {\n yield* flushPendingToolCalls(pendingToolCalls);\n yield { type: \"done\" as const, usage: currentUsage };\n\n return;\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(data);\n } catch {\n return;\n }\n\n const usageUpdate = narrowUsageRecord(parsed);\n if (usageUpdate) {\n yield { type: \"usage_update\" as const, usage: usageUpdate };\n }\n\n const { choices } = parsed;\n if (!isRecordArray(choices)) {\n return;\n }\n\n const [firstChoice] = choices;\n if (!firstChoice) {\n return;\n }\n\n yield* processChoice(firstChoice, pendingToolCalls);\n};\n\nconst isUsageUpdate = (chunk: {\n type: string;\n usage?: AIUsage;\n}): chunk is { type: \"usage_update\"; usage: AIUsage } =>\n chunk.type === \"usage_update\";\n\nconst collectYieldableChunks = (\n line: string,\n pendingToolCalls: Map<number, PendingToolCall>,\n usageRef: UsageRef,\n) => {\n const allChunks = Array.from(\n processSSELine(line, pendingToolCalls, usageRef.current),\n );\n const usageChunks = allChunks.filter(isUsageUpdate);\n const lastUsage = usageChunks.at(NOT_FOUND);\n\n if (lastUsage) {\n usageRef.current = lastUsage.usage;\n }\n\n return allChunks.filter((chunk) => !isUsageUpdate(chunk));\n};\n\nconst processSSELines = function* (\n lines: string[],\n pendingToolCalls: Map<number, PendingToolCall>,\n usageRef: UsageRef,\n) {\n for (const line of lines) {\n yield* collectYieldableChunks(line, pendingToolCalls, usageRef);\n }\n};\n\nconst processStreamValue = (\n value: Uint8Array,\n decoder: TextDecoder,\n state: StreamState,\n) => {\n state.buffer += decoder.decode(value, { stream: true });\n const lines = state.buffer.split(\"\\n\");\n state.buffer = lines.pop() ?? \"\";\n\n return lines;\n};\n\nconst drainReader = async function* (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: StreamState,\n signal?: AbortSignal,\n) {\n /* eslint-disable no-await-in-loop */\n for (\n let result = await reader.read();\n !result.done && !signal?.aborted;\n result = await reader.read()\n ) {\n /* eslint-enable no-await-in-loop */\n const lines = processStreamValue(result.value, decoder, state);\n yield* processSSELines(lines, state.pendingToolCalls, state.usageRef);\n }\n};\n\nconst parseSSEStream = async function* (\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n const state: StreamState = {\n buffer: \"\",\n pendingToolCalls: new Map<number, PendingToolCall>(),\n usageRef: { current: undefined },\n };\n\n try {\n yield* drainReader(reader, decoder, state, signal);\n yield { type: \"done\" as const, usage: state.usageRef.current };\n } finally {\n reader.releaseLock();\n }\n};\n\nconst fetchOpenAIStream = async function* (\n baseUrl: string,\n apiKey: string,\n body: Record<string, unknown>,\n signal?: AbortSignal,\n) {\n const target = `${baseUrl}/v1/chat/completions`;\n const response = await fetch(target, {\n ...h2IfHttps(target),\n body: JSON.stringify(body),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`OpenAI API error ${response.status}: ${errorText}`);\n }\n\n if (!response.body) {\n throw new Error(\"OpenAI API returned no response body\");\n }\n\n yield* parseSSEStream(response.body, signal);\n};\n\nexport const openai = (config: OpenAIConfig): AIProviderConfig => {\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n if (!config.apiKey && !config.tokenSource) {\n throw new Error(\"openai() requires either apiKey or tokenSource\");\n }\n const resolveKey = async () => {\n if (config.tokenSource) {\n return await Promise.resolve(config.tokenSource());\n }\n return config.apiKey!;\n };\n\n return instrumentAIProvider(\n {\n stream: (params: AIProviderStreamParams) => {\n const body = buildRequestBody(params);\n return (async function* () {\n const apiKey = await resolveKey();\n yield* fetchOpenAIStream(baseUrl, apiKey, body, params.signal);\n })();\n },\n },\n \"openai\",\n );\n};\n",
9
+ "import type {\n AIProviderConfig,\n AIProviderContentBlock,\n AIProviderMessage,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n AIUsage,\n} from \"../../../types/ai\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// The `protocol` option lands in @types/bun 1.3.14; widen locally for now.\nimport { instrumentAIProvider } from \"./instrumentation\";\nimport { ProviderError } from \"../errors/providerError\";\nimport { isOpenAIReasoningModel, openaiEffortValue } from \"./reasoning\";\n// Hard-skip on non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\n\ntype OpenAIConfig = {\n apiKey?: string;\n baseUrl?: string;\n tokenSource?: () => Promise<string> | string;\n};\n\ntype OpenAIMessage = {\n content: string | Array<Record<string, unknown>> | null;\n role: \"user\" | \"assistant\" | \"system\" | \"tool\";\n tool_call_id?: string;\n tool_calls?: Array<{\n function: { arguments: string; name: string };\n id: string;\n type: \"function\";\n }>;\n};\n\ntype PendingToolCall = {\n arguments: string;\n id: string;\n name: string;\n};\n\ntype UsageRef = {\n current: AIUsage | undefined;\n};\n\ntype StreamState = {\n buffer: string;\n pendingToolCalls: Map<number, PendingToolCall>;\n usageRef: UsageRef;\n};\n\nconst DEFAULT_BASE_URL = \"https://api.openai.com\";\nconst SSE_DATA_PREFIX_LENGTH = 6;\nconst DONE_SENTINEL = \"[DONE]\";\nconst NOT_FOUND = -1;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst isRecordArray = (\n value: unknown,\n): value is Array<Record<string, unknown>> =>\n Array.isArray(value) && value.length > 0 && isRecord(value[0]);\n\nconst hasArrayContent = (\n msg: AIProviderMessage,\n): msg is AIProviderMessage & { content: AIProviderContentBlock[] } =>\n typeof msg.content !== \"string\" && Array.isArray(msg.content);\n\nconst buildToolMessages = (blocks: AIProviderContentBlock[]) => {\n const toolUseBlocks = blocks.filter((block) => block.type === \"tool_use\");\n const toolResultBlocks = blocks.filter(\n (block) => block.type === \"tool_result\",\n );\n const messages: OpenAIMessage[] = [];\n\n if (toolUseBlocks.length > 0) {\n messages.push({\n content: null,\n role: \"assistant\",\n tool_calls: toolUseBlocks.map((block) => ({\n function: {\n arguments:\n typeof block.input === \"string\"\n ? block.input\n : JSON.stringify(block.input),\n name: block.name,\n },\n id: block.id,\n type: \"function\" as const,\n })),\n });\n }\n\n for (const result of toolResultBlocks) {\n messages.push({\n content: typeof result.content === \"string\" ? result.content : \"\",\n role: \"tool\",\n tool_call_id: result.tool_use_id,\n });\n }\n\n return messages;\n};\n\nconst processMessageAtIndex = (\n result: OpenAIMessage[],\n msg: AIProviderMessage,\n idx: number,\n) => {\n if (!hasArrayContent(msg)) {\n return;\n }\n\n const hasToolBlocks = msg.content.some(\n (block) => block.type === \"tool_use\" || block.type === \"tool_result\",\n );\n\n if (!hasToolBlocks) {\n return;\n }\n\n const toolMessages = buildToolMessages(msg.content);\n result.splice(idx, 1, ...toolMessages);\n};\n\nconst convertSingleMessage = (\n result: OpenAIMessage[],\n msg: AIProviderMessage | undefined,\n idx: number,\n) => {\n if (!msg) {\n return;\n }\n\n processMessageAtIndex(result, msg, idx);\n};\n\nconst convertToolResultMessages = (\n messages: OpenAIMessage[],\n params: AIProviderStreamParams,\n) => {\n const result = [...messages];\n\n for (let idx = 0; idx < params.messages.length; idx++) {\n convertSingleMessage(result, params.messages[idx], idx);\n }\n\n return result;\n};\n\nconst mapToolDefinitions = (tools: AIProviderToolDefinition[]) =>\n tools.map((tool) => ({\n function: {\n description: tool.description,\n name: tool.name,\n parameters: tool.input_schema,\n },\n type: \"function\",\n }));\n\nconst mapContentBlockToOpenAI = (block: AIProviderContentBlock) => {\n if (block.type === \"image\") {\n return {\n image_url: {\n url: `data:${block.source.media_type};base64,${block.source.data}`,\n },\n type: \"image_url\",\n };\n }\n\n if (block.type === \"document\") {\n return {\n file: {\n file_data: `data:${block.source.media_type};base64,${block.source.data}`,\n filename: block.name ?? \"document.pdf\",\n },\n type: \"file\",\n };\n }\n\n if (block.type === \"text\") {\n return { text: block.content, type: \"text\" };\n }\n\n return null;\n};\n\nconst mapOpenAIContent = (msg: AIProviderStreamParams[\"messages\"][number]) => {\n if (typeof msg.content === \"string\") {\n return msg.content;\n }\n\n const hasMedia = msg.content.some(\n (block) => block.type === \"image\" || block.type === \"document\",\n );\n\n if (!hasMedia) {\n return null;\n }\n\n return msg.content\n .map(mapContentBlockToOpenAI)\n .filter((mapped) => mapped !== null);\n};\n\nconst buildRequestBody = (params: AIProviderStreamParams) => {\n const messages = convertToolResultMessages(\n params.messages.map((msg) => ({\n content: mapOpenAIContent(msg),\n role: msg.role,\n })),\n params,\n );\n\n const body: Record<string, unknown> = {\n messages,\n model: params.model,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n if (params.tools && params.tools.length > 0) {\n body.tools = mapToolDefinitions(params.tools);\n if (\n params.toolChoice === \"auto\" ||\n params.toolChoice === \"none\" ||\n params.toolChoice === \"required\"\n ) {\n body.tool_choice = params.toolChoice;\n } else if (params.toolChoice && typeof params.toolChoice === \"object\") {\n body.tool_choice = {\n function: { name: params.toolChoice.name },\n type: \"function\",\n };\n }\n if (typeof params.parallelToolCalls === \"boolean\") {\n body.parallel_tool_calls = params.parallelToolCalls;\n }\n }\n\n // Reasoning models (o-series, GPT-5) reject temperature/top_p and use\n // `max_completion_tokens`; they take a `reasoning_effort` dial instead. Other\n // models take the usual sampling params and ignore reasoning.\n if (isOpenAIReasoningModel(params.model)) {\n if (typeof params.maxTokens === \"number\") {\n body.max_completion_tokens = params.maxTokens;\n }\n if (params.reasoning) {\n const effort = openaiEffortValue(params.model, params.reasoning);\n if (effort) body.reasoning_effort = effort;\n }\n } else {\n if (typeof params.temperature === \"number\") {\n body.temperature = params.temperature;\n }\n if (typeof params.topP === \"number\") body.top_p = params.topP;\n if (typeof params.maxTokens === \"number\")\n body.max_tokens = params.maxTokens;\n }\n if (params.stopSequences && params.stopSequences.length > 0)\n body.stop = params.stopSequences;\n if (typeof params.seed === \"number\") body.seed = params.seed;\n if (typeof params.frequencyPenalty === \"number\")\n body.frequency_penalty = params.frequencyPenalty;\n if (typeof params.presencePenalty === \"number\")\n body.presence_penalty = params.presencePenalty;\n\n if (params.responseFormat) {\n if (\n params.responseFormat.type === \"text\" ||\n params.responseFormat.type === \"json_object\"\n ) {\n body.response_format = { type: params.responseFormat.type };\n } else if (params.responseFormat.type === \"json_schema\") {\n body.response_format = {\n json_schema: {\n name: params.responseFormat.name,\n schema: params.responseFormat.schema,\n strict: params.responseFormat.strict ?? true,\n },\n type: \"json_schema\",\n };\n }\n }\n\n return body;\n};\n\nconst parseToolInput = (rawArguments: string) => {\n try {\n return JSON.parse(rawArguments);\n } catch {\n return rawArguments;\n }\n};\n\nconst flushPendingToolCalls = function* (\n pendingToolCalls: Map<number, PendingToolCall>,\n) {\n for (const [, tool] of pendingToolCalls) {\n const input = parseToolInput(tool.arguments);\n yield {\n id: tool.id,\n input,\n name: tool.name,\n type: \"tool_use\" as const,\n };\n }\n\n pendingToolCalls.clear();\n};\n\nconst extractUsage = (parsedUsage: Record<string, number>) => ({\n inputTokens: parsedUsage.prompt_tokens ?? 0,\n outputTokens: parsedUsage.completion_tokens ?? 0,\n});\n\nconst resolveToolCallIndex = (toolCall: Record<string, unknown>) => {\n const raw = typeof toolCall.index === \"number\" ? toolCall.index : NOT_FOUND;\n\n return raw < 0 ? undefined : raw;\n};\n\nconst initPendingToolCall = (\n toolCall: Record<string, unknown>,\n func: Record<string, unknown> | null,\n index: number,\n pendingToolCalls: Map<number, PendingToolCall>,\n) => {\n if (pendingToolCalls.has(index)) {\n return;\n }\n\n const toolId = typeof toolCall.id === \"string\" ? toolCall.id : \"\";\n const toolName = func && typeof func.name === \"string\" ? func.name : \"\";\n\n pendingToolCalls.set(index, {\n arguments: \"\",\n id: toolId,\n name: toolName,\n });\n};\n\nconst updatePendingToolCall = (\n toolCall: Record<string, unknown>,\n func: Record<string, unknown> | null,\n pending: PendingToolCall,\n) => {\n if (typeof toolCall.id === \"string\") {\n pending.id = toolCall.id;\n }\n\n if (func && typeof func.name === \"string\") {\n pending.name = func.name;\n }\n\n if (func && typeof func.arguments === \"string\") {\n pending.arguments += func.arguments;\n }\n};\n\nconst processToolCallDelta = (\n toolCall: Record<string, unknown>,\n pendingToolCalls: Map<number, PendingToolCall>,\n) => {\n const index = resolveToolCallIndex(toolCall);\n if (index === undefined) {\n return;\n }\n\n const func = isRecord(toolCall.function) ? toolCall.function : null;\n initPendingToolCall(toolCall, func, index, pendingToolCalls);\n\n const pending = pendingToolCalls.get(index);\n if (!pending) {\n return;\n }\n\n updatePendingToolCall(toolCall, func, pending);\n};\n\nconst processToolCallDeltas = (\n toolCalls: Array<Record<string, unknown>>,\n pendingToolCalls: Map<number, PendingToolCall>,\n) => {\n for (const toolCall of toolCalls) {\n processToolCallDelta(toolCall, pendingToolCalls);\n }\n};\n\nconst processDelta = function* (\n delta: Record<string, unknown>,\n pendingToolCalls: Map<number, PendingToolCall>,\n) {\n if (typeof delta.content === \"string\") {\n yield { content: delta.content, type: \"text\" as const };\n }\n\n if (isRecordArray(delta.tool_calls)) {\n processToolCallDeltas(delta.tool_calls, pendingToolCalls);\n }\n};\n\nconst processChoice = function* (\n choice: Record<string, unknown>,\n pendingToolCalls: Map<number, PendingToolCall>,\n) {\n const delta = isRecord(choice.delta) ? choice.delta : null;\n if (delta) {\n yield* processDelta(delta, pendingToolCalls);\n }\n\n if (choice.finish_reason === \"tool_calls\") {\n yield* flushPendingToolCalls(pendingToolCalls);\n }\n};\n\nconst narrowUsageRecord = (parsed: Record<string, unknown>) => {\n if (!isRecord(parsed.usage)) {\n return undefined;\n }\n\n const { usage } = parsed;\n const promptTokens =\n typeof usage.prompt_tokens === \"number\" ? usage.prompt_tokens : 0;\n const completionTokens =\n typeof usage.completion_tokens === \"number\" ? usage.completion_tokens : 0;\n\n return extractUsage({\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n });\n};\n\nconst processSSELine = function* (\n line: string,\n pendingToolCalls: Map<number, PendingToolCall>,\n currentUsage: AIUsage | undefined,\n) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith(\"data: \")) {\n return;\n }\n\n const data = trimmed.slice(SSE_DATA_PREFIX_LENGTH);\n if (data === DONE_SENTINEL) {\n yield* flushPendingToolCalls(pendingToolCalls);\n yield { type: \"done\" as const, usage: currentUsage };\n\n return;\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(data);\n } catch {\n return;\n }\n\n const usageUpdate = narrowUsageRecord(parsed);\n if (usageUpdate) {\n yield { type: \"usage_update\" as const, usage: usageUpdate };\n }\n\n const { choices } = parsed;\n if (!isRecordArray(choices)) {\n return;\n }\n\n const [firstChoice] = choices;\n if (!firstChoice) {\n return;\n }\n\n yield* processChoice(firstChoice, pendingToolCalls);\n};\n\nconst isUsageUpdate = (chunk: {\n type: string;\n usage?: AIUsage;\n}): chunk is { type: \"usage_update\"; usage: AIUsage } =>\n chunk.type === \"usage_update\";\n\nconst collectYieldableChunks = (\n line: string,\n pendingToolCalls: Map<number, PendingToolCall>,\n usageRef: UsageRef,\n) => {\n const allChunks = Array.from(\n processSSELine(line, pendingToolCalls, usageRef.current),\n );\n const usageChunks = allChunks.filter(isUsageUpdate);\n const lastUsage = usageChunks.at(NOT_FOUND);\n\n if (lastUsage) {\n usageRef.current = lastUsage.usage;\n }\n\n return allChunks.filter((chunk) => !isUsageUpdate(chunk));\n};\n\nconst processSSELines = function* (\n lines: string[],\n pendingToolCalls: Map<number, PendingToolCall>,\n usageRef: UsageRef,\n) {\n for (const line of lines) {\n yield* collectYieldableChunks(line, pendingToolCalls, usageRef);\n }\n};\n\nconst processStreamValue = (\n value: Uint8Array,\n decoder: TextDecoder,\n state: StreamState,\n) => {\n state.buffer += decoder.decode(value, { stream: true });\n const lines = state.buffer.split(\"\\n\");\n state.buffer = lines.pop() ?? \"\";\n\n return lines;\n};\n\nconst drainReader = async function* (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: StreamState,\n signal?: AbortSignal,\n) {\n /* eslint-disable no-await-in-loop */\n for (\n let result = await reader.read();\n !result.done && !signal?.aborted;\n result = await reader.read()\n ) {\n /* eslint-enable no-await-in-loop */\n const lines = processStreamValue(result.value, decoder, state);\n yield* processSSELines(lines, state.pendingToolCalls, state.usageRef);\n }\n};\n\nconst parseSSEStream = async function* (\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n const state: StreamState = {\n buffer: \"\",\n pendingToolCalls: new Map<number, PendingToolCall>(),\n usageRef: { current: undefined },\n };\n\n try {\n yield* drainReader(reader, decoder, state, signal);\n yield { type: \"done\" as const, usage: state.usageRef.current };\n } finally {\n reader.releaseLock();\n }\n};\n\nconst fetchOpenAIStream = async function* (\n baseUrl: string,\n apiKey: string,\n body: Record<string, unknown>,\n signal?: AbortSignal,\n) {\n const target = `${baseUrl}/v1/chat/completions`;\n const response = await fetch(target, {\n ...h2IfHttps(target),\n body: JSON.stringify(body),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw ProviderError.fromResponse(\"openai\", response.status, errorText);\n }\n\n if (!response.body) {\n throw new ProviderError({\n message: \"OpenAI API returned no response body\",\n provider: \"openai\",\n retryable: true,\n });\n }\n\n yield* parseSSEStream(response.body, signal);\n};\n\nexport const openai = (config: OpenAIConfig): AIProviderConfig => {\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n if (!config.apiKey && !config.tokenSource) {\n throw new Error(\"openai() requires either apiKey or tokenSource\");\n }\n const resolveKey = async () => {\n if (config.tokenSource) {\n return await Promise.resolve(config.tokenSource());\n }\n return config.apiKey!;\n };\n\n return instrumentAIProvider(\n {\n stream: (params: AIProviderStreamParams) => {\n const body = buildRequestBody(params);\n return (async function* () {\n const apiKey = await resolveKey();\n yield* fetchOpenAIStream(baseUrl, apiKey, body, params.signal);\n })();\n },\n },\n \"openai\",\n );\n};\n",
8
10
  "import { openai } from \"./openai\";\n\n/**\n * Creates a provider for any OpenAI-compatible API.\n * Many providers (Google, xAI, DeepSeek, Mistral, etc.)\n * expose OpenAI-compatible chat completion endpoints.\n */\nexport const alibaba = (config: { apiKey: string }) =>\n openaiCompatible({\n apiKey: config.apiKey,\n baseUrl: \"https://dashscope-intl.aliyuncs.com/compatible-mode\",\n });\nexport const deepseek = (config: { apiKey: string }) =>\n openaiCompatible({\n apiKey: config.apiKey,\n baseUrl: \"https://api.deepseek.com\",\n });\nexport const google = (config: { apiKey: string }) =>\n openaiCompatible({\n apiKey: config.apiKey,\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta/openai\",\n });\nexport const meta = (config: { apiKey: string }) =>\n openaiCompatible({\n apiKey: config.apiKey,\n baseUrl: \"https://api.llama.com/compat/v1\",\n });\nexport const mistralai = (config: { apiKey: string }) =>\n openaiCompatible({\n apiKey: config.apiKey,\n baseUrl: \"https://api.mistral.ai\",\n });\nexport const moonshot = (config: { apiKey: string }) =>\n openaiCompatible({\n apiKey: config.apiKey,\n baseUrl: \"https://api.moonshot.ai\",\n });\nexport const openaiCompatible = (config: {\n apiKey?: string;\n baseUrl: string;\n tokenSource?: () => Promise<string> | string;\n}) =>\n openai({\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n tokenSource: config.tokenSource,\n });\nexport const xai = (config: { apiKey: string }) =>\n openaiCompatible({\n apiKey: config.apiKey,\n baseUrl: \"https://api.x.ai\",\n });\n",
9
11
  "import type {\n AIProviderConfig,\n AIProviderContentBlock,\n AIProviderMessage,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n AIUsage,\n} from \"../../../types/ai\";\nimport { instrumentAIProvider } from \"./instrumentation\";\nimport { isOpenAIReasoningModel, openaiEffortValue } from \"./reasoning\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// The `protocol` option lands in @types/bun 1.3.14; widen locally for now.\n// Hard-skip on non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\n\ntype OpenAIResponsesConfig = {\n apiKey: string;\n baseUrl?: string;\n imageModels?: Set<string> | string[];\n};\n\ntype PendingFunctionCall = {\n callId: string;\n name: string;\n arguments: string;\n};\n\ntype StreamState = {\n buffer: string;\n currentEvent: string;\n pendingCalls: Map<string, PendingFunctionCall>;\n usage: AIUsage | undefined;\n};\n\nconst DEFAULT_BASE_URL = \"https://api.openai.com\";\nconst EVENT_PREFIX_LENGTH = 7;\nconst DATA_PREFIX_LENGTH = 6;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst isRecordArray = (\n value: unknown,\n): value is Array<Record<string, unknown>> =>\n Array.isArray(value) && value.length > 0 && isRecord(value[0]);\n\n/* ─── Message conversion ─── */\n\nconst mapBlockToResponsesFormat = (block: AIProviderContentBlock) => {\n if (block.type === \"text\") {\n return { text: block.content, type: \"input_text\" };\n }\n\n if (block.type === \"image\") {\n return {\n image_url: {\n url: `data:${block.source.media_type};base64,${block.source.data}`,\n },\n type: \"input_image\",\n };\n }\n\n if (block.type === \"document\") {\n return {\n file: {\n file_data: `data:${block.source.media_type};base64,${block.source.data}`,\n filename: block.name ?? \"document.pdf\",\n },\n type: \"input_file\",\n };\n }\n\n return null;\n};\n\nconst mapContentToResponsesFormat = (\n content: string | AIProviderContentBlock[],\n) => {\n if (typeof content === \"string\") {\n return content;\n }\n\n const parts = content\n .map(mapBlockToResponsesFormat)\n .filter((mapped) => mapped !== null);\n\n return parts.length > 0 ? parts : \"\";\n};\n\nconst hasToolBlocks = (content: AIProviderContentBlock[]) =>\n content.some(\n (block) => block.type === \"tool_use\" || block.type === \"tool_result\",\n );\n\nconst convertToolBlock = (block: AIProviderContentBlock) => {\n if (block.type === \"tool_use\") {\n return {\n arguments:\n typeof block.input === \"string\"\n ? block.input\n : JSON.stringify(block.input),\n call_id: block.id,\n name: block.name,\n type: \"function_call\",\n };\n }\n\n if (block.type === \"tool_result\") {\n return {\n call_id: block.tool_use_id,\n output: typeof block.content === \"string\" ? block.content : \"\",\n type: \"function_call_output\",\n };\n }\n\n return null;\n};\n\nconst convertToolBlocks = (content: AIProviderContentBlock[]) =>\n content.map(convertToolBlock).filter((converted) => converted !== null);\n\nconst convertMessage = (msg: AIProviderMessage) => {\n if (\n typeof msg.content !== \"string\" &&\n Array.isArray(msg.content) &&\n hasToolBlocks(msg.content)\n ) {\n return convertToolBlocks(msg.content);\n }\n\n const content = mapContentToResponsesFormat(msg.content);\n\n return [\n {\n content,\n role: msg.role === \"system\" ? \"developer\" : msg.role,\n type: \"message\",\n },\n ];\n};\n\nconst buildInput = (messages: AIProviderMessage[]) => {\n const input: Array<Record<string, unknown>> = [];\n\n for (const msg of messages) {\n input.push(...convertMessage(msg));\n }\n\n return input;\n};\n\nconst mapToolDefinition = (tool: AIProviderToolDefinition) => ({\n description: tool.description,\n name: tool.name,\n parameters: tool.input_schema,\n type: \"function\",\n});\n\nconst buildTools = (\n tools: AIProviderToolDefinition[] | undefined,\n isImageModel: boolean,\n) => {\n const mapped = tools ? tools.map(mapToolDefinition) : [];\n const result: Array<Record<string, unknown>> = [...mapped];\n\n if (isImageModel) {\n result.push({ type: \"image_generation\" });\n }\n\n return result.length > 0 ? result : undefined;\n};\n\nconst buildRequestBody = (\n params: AIProviderStreamParams,\n isImageModel: boolean,\n) => {\n const body: Record<string, unknown> = {\n input: buildInput(params.messages),\n model: params.model,\n stream: true,\n };\n\n if (params.systemPrompt) {\n body.instructions = params.systemPrompt;\n }\n\n const tools = buildTools(params.tools, isImageModel);\n\n if (tools) {\n body.tools = tools;\n if (params.toolChoice === \"auto\" || params.toolChoice === \"none\" || params.toolChoice === \"required\") {\n body.tool_choice = params.toolChoice;\n } else if (params.toolChoice && typeof params.toolChoice === \"object\") {\n body.tool_choice = {\n name: params.toolChoice.name,\n type: \"function\",\n };\n }\n if (typeof params.parallelToolCalls === \"boolean\") {\n body.parallel_tool_calls = params.parallelToolCalls;\n }\n }\n\n if (typeof params.temperature === \"number\") body.temperature = params.temperature;\n if (typeof params.topP === \"number\") body.top_p = params.topP;\n if (typeof params.maxTokens === \"number\") body.max_output_tokens = params.maxTokens;\n if (params.stopSequences && params.stopSequences.length > 0) body.stop = params.stopSequences;\n if (typeof params.seed === \"number\") body.seed = params.seed;\n if (typeof params.frequencyPenalty === \"number\") body.frequency_penalty = params.frequencyPenalty;\n if (typeof params.presencePenalty === \"number\") body.presence_penalty = params.presencePenalty;\n\n if (params.responseFormat) {\n if (params.responseFormat.type === \"text\" || params.responseFormat.type === \"json_object\") {\n body.text = { format: { type: params.responseFormat.type } };\n } else if (params.responseFormat.type === \"json_schema\") {\n body.text = {\n format: {\n name: params.responseFormat.name,\n schema: params.responseFormat.schema,\n strict: params.responseFormat.strict ?? true,\n type: \"json_schema\",\n },\n };\n }\n }\n\n // Reasoning models take a `reasoning.effort` dial; non-reasoning models ignore\n // it. Effort comes from the portable `reasoning` knob, mapped per model.\n if (params.reasoning && isOpenAIReasoningModel(params.model)) {\n const effort = openaiEffortValue(params.model, params.reasoning);\n if (effort) {\n body.reasoning = {\n effort,\n summary: \"auto\",\n };\n }\n }\n\n return body;\n};\n\n/* ─── SSE parsing ─── */\n\nconst parseJSON = (data: string) => {\n try {\n return JSON.parse(data);\n } catch {\n return null;\n }\n};\n\nconst parseToolInput = (rawArguments: string) => {\n try {\n return JSON.parse(rawArguments);\n } catch {\n return rawArguments;\n }\n};\n\nconst extractUsage = (response: Record<string, unknown>) => {\n if (!isRecord(response.usage)) {\n return undefined;\n }\n\n const { usage } = response;\n\n return {\n inputTokens:\n typeof usage.input_tokens === \"number\" ? usage.input_tokens : 0,\n outputTokens:\n typeof usage.output_tokens === \"number\" ? usage.output_tokens : 0,\n };\n};\n\nconst extractMimeFormat = (mimeType: unknown) => {\n if (typeof mimeType !== \"string\") {\n return \"png\";\n }\n\n if (mimeType.includes(\"jpeg\")) return \"jpeg\";\n if (mimeType.includes(\"webp\")) return \"webp\";\n\n return \"png\";\n};\n\nconst processTextDelta = function* (parsed: Record<string, unknown>) {\n if (typeof parsed.delta === \"string\") {\n yield { content: parsed.delta, type: \"text\" as const };\n }\n};\n\nconst processPartialImage = function* (parsed: Record<string, unknown>) {\n const itemId =\n typeof parsed.item_id === \"string\" ? parsed.item_id : undefined;\n const b64 =\n typeof parsed.partial_image_b64 === \"string\"\n ? parsed.partial_image_b64\n : undefined;\n\n if (b64) {\n yield {\n data: b64,\n format: \"png\",\n imageId: itemId,\n isPartial: true,\n type: \"image\" as const,\n };\n }\n};\n\nconst processFunctionCallArgumentsDelta = (\n parsed: Record<string, unknown>,\n pendingCalls: Map<string, PendingFunctionCall>,\n) => {\n const itemId = typeof parsed.item_id === \"string\" ? parsed.item_id : \"\";\n const callId = typeof parsed.call_id === \"string\" ? parsed.call_id : \"\";\n const delta =\n typeof parsed.arguments_delta === \"string\" ? parsed.arguments_delta : \"\";\n\n const existing = pendingCalls.get(itemId);\n\n if (existing) {\n existing.arguments += delta;\n } else {\n pendingCalls.set(itemId, {\n arguments: delta,\n callId,\n name: \"\",\n });\n }\n};\n\nconst processFunctionCallArgumentsDone = function* (\n parsed: Record<string, unknown>,\n pendingCalls: Map<string, PendingFunctionCall>,\n) {\n const itemId = typeof parsed.item_id === \"string\" ? parsed.item_id : \"\";\n const callId = typeof parsed.call_id === \"string\" ? parsed.call_id : \"\";\n const fullArgs = typeof parsed.arguments === \"string\" ? parsed.arguments : \"\";\n\n const pending = pendingCalls.get(itemId);\n const name = pending?.name ?? \"\";\n const args = fullArgs || pending?.arguments || \"\";\n\n pendingCalls.delete(itemId);\n\n yield {\n id: callId || pending?.callId || itemId,\n input: parseToolInput(args),\n name,\n type: \"tool_use\" as const,\n };\n};\n\nconst processOutputItemAdded = (\n parsed: Record<string, unknown>,\n pendingCalls: Map<string, PendingFunctionCall>,\n) => {\n if (!isRecord(parsed.item)) {\n return;\n }\n\n const { item } = parsed;\n const itemId = typeof item.id === \"string\" ? item.id : \"\";\n const itemType = typeof item.type === \"string\" ? item.type : \"\";\n\n if (itemType !== \"function_call\") {\n return;\n }\n\n const callId = typeof item.call_id === \"string\" ? item.call_id : \"\";\n const name = typeof item.name === \"string\" ? item.name : \"\";\n\n pendingCalls.set(itemId, {\n arguments: \"\",\n callId,\n name,\n });\n};\n\nconst isCompletedImageGeneration = (item: Record<string, unknown>) =>\n item.type === \"image_generation_call\" &&\n item.status === \"completed\" &&\n typeof item.result === \"string\" &&\n item.result !== \"\";\n\nconst buildImageChunk = (item: Record<string, unknown>) => ({\n data: typeof item.result === \"string\" ? item.result : \"\",\n format: extractMimeFormat(item.output_format),\n imageId: typeof item.id === \"string\" ? item.id : undefined,\n isPartial: false,\n revisedPrompt:\n typeof item.revised_prompt === \"string\" ? item.revised_prompt : undefined,\n type: \"image\" as const,\n});\n\nconst extractImageFromOutput = function* (\n output: Array<Record<string, unknown>>,\n) {\n const completedImages = output.filter(isCompletedImageGeneration);\n\n for (const item of completedImages) {\n yield buildImageChunk(item);\n }\n};\n\nconst processCompleted = function* (parsed: Record<string, unknown>) {\n if (!isRecord(parsed.response)) {\n yield { type: \"done\" as const, usage: undefined };\n\n return;\n }\n\n const { response } = parsed;\n const usage = extractUsage(response);\n\n if (isRecordArray(response.output)) {\n yield* extractImageFromOutput(response.output);\n }\n\n yield { type: \"done\" as const, usage };\n};\n\nconst processSSEEvent = function* (\n eventType: string,\n parsed: Record<string, unknown>,\n pendingCalls: Map<string, PendingFunctionCall>,\n) {\n switch (eventType) {\n case \"response.reasoning_summary_text.delta\": {\n const delta = typeof parsed.delta === \"string\" ? parsed.delta : \"\";\n if (!delta) break;\n\n yield {\n content: delta,\n type: \"thinking\" as const,\n };\n\n break;\n }\n\n case \"response.output_text.delta\":\n yield* processTextDelta(parsed);\n break;\n\n case \"response.image_generation_call.partial_image\":\n yield* processPartialImage(parsed);\n break;\n\n case \"response.output_item.added\":\n processOutputItemAdded(parsed, pendingCalls);\n break;\n\n case \"response.function_call_arguments.delta\":\n processFunctionCallArgumentsDelta(parsed, pendingCalls);\n break;\n\n case \"response.function_call_arguments.done\":\n yield* processFunctionCallArgumentsDone(parsed, pendingCalls);\n break;\n\n case \"response.completed\":\n yield* processCompleted(parsed);\n break;\n\n case \"response.failed\":\n case \"response.incomplete\": {\n const respObj = isRecord(parsed.response) ? parsed.response : parsed;\n const errMsg =\n isRecord(respObj.error) && typeof respObj.error.message === \"string\"\n ? respObj.error.message\n : `OpenAI Responses API: ${eventType}`;\n throw new Error(errMsg);\n }\n }\n};\n\nconst flushSSEBuffer = function* (state: StreamState) {\n if (!state.currentEvent || !state.buffer) {\n return;\n }\n\n const parsed = parseJSON(state.buffer);\n\n if (parsed) {\n yield* processSSEEvent(state.currentEvent, parsed, state.pendingCalls);\n }\n\n state.currentEvent = \"\";\n state.buffer = \"\";\n};\n\nconst parseSSELine = (trimmed: string, state: StreamState) => {\n if (trimmed.startsWith(\"event: \")) {\n state.currentEvent = trimmed.slice(EVENT_PREFIX_LENGTH);\n } else if (trimmed.startsWith(\"data: \")) {\n state.buffer = trimmed.slice(DATA_PREFIX_LENGTH);\n }\n};\n\nconst processSSELine = function* (line: string, state: StreamState) {\n const trimmed = line.trim();\n\n if (trimmed) {\n parseSSELine(trimmed, state);\n\n return;\n }\n\n yield* flushSSEBuffer(state);\n};\n\nconst processSSELines = function* (lines: string[], state: StreamState) {\n for (const line of lines) {\n yield* processSSELine(line, state);\n }\n};\n\nconst drainReader = async function* (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: StreamState,\n signal?: AbortSignal,\n) {\n let textBuffer = \"\";\n\n for (\n let result = await reader.read();\n !result.done && !signal?.aborted;\n // eslint-disable-next-line no-await-in-loop\n result = await reader.read()\n ) {\n textBuffer += decoder.decode(result.value, { stream: true });\n const lines = textBuffer.split(\"\\n\");\n textBuffer = lines.pop() ?? \"\";\n\n yield* processSSELines(lines, state);\n }\n\n if (textBuffer.trim()) {\n yield* processSSELines([textBuffer, \"\"], state);\n }\n};\n\nconst parseSSEStream = async function* (\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n const state: StreamState = {\n buffer: \"\",\n currentEvent: \"\",\n pendingCalls: new Map(),\n usage: undefined,\n };\n\n try {\n yield* drainReader(reader, decoder, state, signal);\n } finally {\n reader.releaseLock();\n }\n};\n\nconst fetchResponsesStream = async function* (\n baseUrl: string,\n apiKey: string,\n body: Record<string, unknown>,\n signal?: AbortSignal,\n) {\n const target = `${baseUrl}/v1/responses`;\n const response = await fetch(target, {\n ...h2IfHttps(target),\n body: JSON.stringify(body),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `OpenAI Responses API error ${response.status}: ${errorText}`,\n );\n }\n\n if (!response.body) {\n throw new Error(\"OpenAI Responses API returned no response body\");\n }\n\n yield* parseSSEStream(response.body, signal);\n};\n\nconst resolveImageModels = (\n imageModels: Set<string> | string[] | undefined,\n) => {\n if (!imageModels) {\n return new Set<string>();\n }\n\n if (imageModels instanceof Set) {\n return imageModels;\n }\n\n return new Set(imageModels);\n};\n\nexport const openaiResponses = (config: OpenAIResponsesConfig) => {\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n const imageModels = resolveImageModels(config.imageModels);\n\n return instrumentAIProvider(\n {\n stream: (params: AIProviderStreamParams) => {\n const isImageModel = imageModels.has(params.model);\n const body = buildRequestBody(params, isImageModel);\n\n return fetchResponsesStream(\n baseUrl,\n config.apiKey,\n body,\n params.signal,\n );\n },\n } satisfies AIProviderConfig,\n \"openai-responses\",\n );\n};\n",
10
12
  "import type {\n AIProviderConfig,\n AIProviderContentBlock,\n AIProviderMessage,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n AIUsage,\n} from \"../../../types/ai\";\nimport { instrumentAIProvider } from \"./instrumentation\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// The `protocol` option lands in @types/bun 1.3.14; widen locally for now.\n// Hard-skip on non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\n\ntype GeminiConfig = {\n apiKey: string;\n baseUrl?: string;\n imageModels?: Set<string> | string[];\n};\n\ntype StreamState = {\n buffer: string;\n usage: AIUsage | undefined;\n};\n\nconst DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com\";\nconst SSE_DATA_PREFIX_LENGTH = 6;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst isRecordArray = (\n value: unknown,\n): value is Array<Record<string, unknown>> =>\n Array.isArray(value) && value.length > 0 && isRecord(value[0]);\n\n/* ─── Message conversion ─── */\n\nconst mapRole = (role: string) => {\n if (role === \"assistant\" || role === \"system\") return \"model\";\n\n return \"user\";\n};\n\nconst mapContentBlock = (block: AIProviderContentBlock) => {\n switch (block.type) {\n case \"text\":\n return { text: block.content };\n case \"image\":\n return {\n inlineData: {\n data: block.source.data,\n mimeType: block.source.media_type,\n },\n };\n case \"document\":\n return {\n inlineData: {\n data: block.source.data,\n mimeType: block.source.media_type,\n },\n };\n case \"tool_use\":\n return {\n functionCall: {\n args:\n typeof block.input === \"string\"\n ? JSON.parse(block.input)\n : block.input,\n name: block.name,\n },\n };\n case \"tool_result\":\n return {\n functionResponse: {\n name: block.tool_use_id,\n response: { result: block.content },\n },\n };\n default:\n return null;\n }\n};\n\nconst convertMessageContent = (content: string | AIProviderContentBlock[]) => {\n if (typeof content === \"string\") {\n return [{ text: content }];\n }\n\n return content.map(mapContentBlock).filter((mapped) => mapped !== null);\n};\n\nconst hasFunctionResponse = (content: AIProviderContentBlock[]) =>\n content.some((block) => block.type === \"tool_result\");\n\nconst convertSingleMessage = (msg: AIProviderMessage) => {\n if (typeof msg.content !== \"string\" && hasFunctionResponse(msg.content)) {\n return { parts: convertMessageContent(msg.content), role: \"user\" };\n }\n\n return {\n parts: convertMessageContent(msg.content),\n role: mapRole(msg.role),\n };\n};\n\nconst convertMessages = (messages: AIProviderMessage[]) =>\n messages.map(convertSingleMessage);\n\nconst mapToolDefinitions = (tools: AIProviderToolDefinition[]) =>\n tools.map((tool) => ({\n description: tool.description,\n name: tool.name,\n parameters: tool.input_schema,\n }));\n\nconst buildRequestBody = (\n params: AIProviderStreamParams,\n isImageModel: boolean,\n) => {\n const body: Record<string, unknown> = {\n contents: convertMessages(params.messages),\n };\n\n const generationConfig: Record<string, unknown> = {};\n if (isImageModel) {\n generationConfig.responseModalities = [\"TEXT\", \"IMAGE\"];\n }\n if (typeof params.temperature === \"number\") generationConfig.temperature = params.temperature;\n if (typeof params.topP === \"number\") generationConfig.topP = params.topP;\n if (typeof params.maxTokens === \"number\") generationConfig.maxOutputTokens = params.maxTokens;\n if (params.stopSequences && params.stopSequences.length > 0) {\n generationConfig.stopSequences = params.stopSequences;\n }\n if (typeof params.seed === \"number\") generationConfig.seed = params.seed;\n if (params.responseFormat?.type === \"json_object\") {\n generationConfig.responseMimeType = \"application/json\";\n } else if (params.responseFormat?.type === \"json_schema\") {\n generationConfig.responseMimeType = \"application/json\";\n generationConfig.responseSchema = params.responseFormat.schema;\n }\n if (Object.keys(generationConfig).length > 0) {\n body.generationConfig = generationConfig;\n }\n\n if (params.systemPrompt) {\n body.systemInstruction = {\n parts: [{ text: params.systemPrompt }],\n };\n }\n\n if (params.tools && params.tools.length > 0) {\n body.tools = [{ functionDeclarations: mapToolDefinitions(params.tools) }];\n if (params.toolChoice) {\n const choice = params.toolChoice;\n if (choice === \"auto\" || choice === \"none\") {\n body.toolConfig = {\n functionCallingConfig: { mode: choice === \"auto\" ? \"AUTO\" : \"NONE\" },\n };\n } else if (choice === \"required\") {\n body.toolConfig = {\n functionCallingConfig: { mode: \"ANY\" },\n };\n } else if (typeof choice === \"object\") {\n body.toolConfig = {\n functionCallingConfig: {\n allowedFunctionNames: [choice.name],\n mode: \"ANY\",\n },\n };\n }\n }\n }\n\n return body;\n};\n\n/* ─── SSE parsing ─── */\n\nconst extractMimeFormat = (mimeType: unknown) => {\n if (typeof mimeType !== \"string\") {\n return \"png\";\n }\n\n if (mimeType.includes(\"jpeg\") || mimeType.includes(\"jpg\")) return \"jpeg\";\n if (mimeType.includes(\"webp\")) return \"webp\";\n\n return \"png\";\n};\n\nconst processTextPart = function* (part: Record<string, unknown>) {\n if (typeof part.text === \"string\" && part.text) {\n yield { content: part.text, type: \"text\" as const };\n }\n};\n\nconst processInlineDataPart = function* (inlineData: Record<string, unknown>) {\n const data = typeof inlineData.data === \"string\" ? inlineData.data : \"\";\n const { mimeType } = inlineData;\n\n if (!data) {\n return;\n }\n\n yield {\n data,\n format: extractMimeFormat(mimeType),\n isPartial: false,\n type: \"image\" as const,\n };\n};\n\nconst processFunctionCallPart = function* (\n functionCall: Record<string, unknown>,\n) {\n const name = typeof functionCall.name === \"string\" ? functionCall.name : \"\";\n const args = functionCall.args ?? {};\n\n yield {\n id: `gemini-${name}-${Date.now()}`,\n input: args,\n name,\n type: \"tool_use\" as const,\n };\n};\n\nconst processPart = function* (part: Record<string, unknown>) {\n if (\"text\" in part) {\n yield* processTextPart(part);\n }\n\n if (isRecord(part.inlineData)) {\n yield* processInlineDataPart(part.inlineData);\n }\n\n if (isRecord(part.functionCall)) {\n yield* processFunctionCallPart(part.functionCall);\n }\n};\n\nconst extractUsage = (parsed: Record<string, unknown>): AIUsage | undefined => {\n if (!isRecord(parsed.usageMetadata)) {\n return undefined;\n }\n\n const { usageMetadata } = parsed;\n\n return {\n inputTokens:\n typeof usageMetadata.promptTokenCount === \"number\"\n ? usageMetadata.promptTokenCount\n : 0,\n outputTokens:\n typeof usageMetadata.candidatesTokenCount === \"number\"\n ? usageMetadata.candidatesTokenCount\n : 0,\n };\n};\n\nconst processChunk = function* (\n parsed: Record<string, unknown>,\n state: StreamState,\n) {\n const usage = extractUsage(parsed);\n\n if (usage) {\n state.usage = usage;\n }\n\n if (!isRecordArray(parsed.candidates)) {\n return;\n }\n\n const [candidate] = parsed.candidates;\n\n if (!candidate || !isRecord(candidate.content)) {\n return;\n }\n\n const { content } = candidate;\n\n if (!isRecordArray(content.parts)) {\n return;\n }\n\n for (const part of content.parts) {\n yield* processPart(part);\n }\n};\n\nconst processSSELine = function* (line: string, state: StreamState) {\n const trimmed = line.trim();\n\n if (!trimmed || !trimmed.startsWith(\"data: \")) {\n return;\n }\n\n const data = trimmed.slice(SSE_DATA_PREFIX_LENGTH);\n\n let parsed: Record<string, unknown>;\n\n try {\n parsed = JSON.parse(data);\n } catch {\n return;\n }\n\n yield* processChunk(parsed, state);\n};\n\nconst processSSEBuffer = function* (lines: string[], state: StreamState) {\n for (const line of lines) {\n yield* processSSELine(line, state);\n }\n};\n\nconst drainReader = async function* (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: StreamState,\n signal?: AbortSignal,\n) {\n let textBuffer = \"\";\n\n for (\n let result = await reader.read();\n !result.done && !signal?.aborted;\n // eslint-disable-next-line no-await-in-loop\n result = await reader.read()\n ) {\n textBuffer += decoder.decode(result.value, { stream: true });\n const lines = textBuffer.split(\"\\n\");\n textBuffer = lines.pop() ?? \"\";\n\n yield* processSSEBuffer(lines, state);\n }\n\n if (textBuffer.trim()) {\n yield* processSSELine(textBuffer, state);\n }\n\n yield { type: \"done\" as const, usage: state.usage };\n};\n\nconst parseSSEStream = async function* (\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n const state: StreamState = {\n buffer: \"\",\n usage: undefined,\n };\n\n try {\n yield* drainReader(reader, decoder, state, signal);\n } finally {\n reader.releaseLock();\n }\n};\n\nconst fetchGeminiStream = async function* (\n baseUrl: string,\n apiKey: string,\n model: string,\n body: Record<string, unknown>,\n signal?: AbortSignal,\n) {\n const url = `${baseUrl}/v1beta/models/${model}:streamGenerateContent?alt=sse&key=${apiKey}`;\n\n const response = await fetch(url, {\n ...h2IfHttps(url),\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Gemini API error ${response.status}: ${errorText}`);\n }\n\n if (!response.body) {\n throw new Error(\"Gemini API returned no response body\");\n }\n\n yield* parseSSEStream(response.body, signal);\n};\n\nconst resolveImageModels = (raw: Set<string> | string[] | undefined) => {\n if (!raw) {\n return new Set<string>();\n }\n\n if (raw instanceof Set) {\n return raw;\n }\n\n return new Set(raw);\n};\n\nexport const gemini = (config: GeminiConfig): AIProviderConfig => {\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n const imageModels = resolveImageModels(config.imageModels);\n\n return instrumentAIProvider(\n {\n stream: (params: AIProviderStreamParams) => {\n const isImageModel = imageModels.has(params.model);\n const body = buildRequestBody(params, isImageModel);\n\n return fetchGeminiStream(\n baseUrl,\n config.apiKey,\n params.model,\n body,\n params.signal,\n );\n },\n },\n \"gemini\",\n );\n};\n",
11
- "import type {\n AIChunk,\n AIProviderConfig,\n AIProviderContentBlock,\n AIProviderMessage,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n AIUsage,\n} from \"../../../types/ai\";\nimport type {\n AnthropicConfig,\n AnthropicMessage,\n AnthropicSSEState,\n} from \"../../../types/anthropic\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// The `protocol` option lands in @types/bun 1.3.14; widen locally for now.\n// Hard-skip on non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\n\nimport { instrumentAIProvider } from \"./instrumentation\";\nimport {\n anthropicEffortValue,\n anthropicReasoningMode,\n anthropicSupportsSampling,\n resolveBudgetTokens,\n} from \"./reasoning\";\n\nconst DEFAULT_BASE_URL = \"https://api.anthropic.com\";\nconst API_VERSION = \"2023-06-01\";\nconst MAX_TOKENS = 8192;\nconst EVENT_PREFIX_LENGTH = 7;\nconst DATA_PREFIX_LENGTH = 6;\n\nconst EMPTY_CHUNKS: AIChunk[] = [];\n\nconst isRecord = (val: unknown): val is Record<string, unknown> =>\n typeof val === \"object\" && val !== null;\n\nconst mapContentBlock = (block: AIProviderContentBlock) => {\n if (block.type === \"thinking\") {\n return {\n signature: block.signature,\n thinking: block.thinking,\n type: \"thinking\",\n };\n }\n\n if (block.type === \"image\") {\n return {\n source: block.source,\n type: \"image\",\n };\n }\n\n if (block.type === \"document\") {\n return {\n source: block.source,\n type: \"document\",\n };\n }\n\n if (block.type === \"tool_result\") {\n return {\n content: block.content,\n tool_use_id: block.tool_use_id,\n type: \"tool_result\",\n };\n }\n\n if (block.type === \"tool_use\") {\n return {\n id: block.id,\n input: block.input,\n name: block.name,\n type: \"tool_use\",\n };\n }\n\n return { text: block.content, type: \"text\" };\n};\n\nconst mapMessage = (msg: AIProviderMessage): AnthropicMessage => ({\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : msg.content.map(mapContentBlock),\n role: msg.role === \"system\" ? \"user\" : msg.role,\n});\n\nconst mapToolDefinition = (tool: AIProviderToolDefinition) => ({\n description: tool.description,\n input_schema: tool.input_schema,\n name: tool.name,\n});\n\nconst buildRequestBody = (params: AIProviderStreamParams) => {\n const messages: AnthropicMessage[] = params.messages\n .filter((msg) => msg.role !== \"system\")\n .map(mapMessage);\n\n const body: Record<string, unknown> = {\n max_tokens: MAX_TOKENS,\n messages,\n model: params.model,\n stream: true,\n };\n\n if (params.systemPrompt) {\n body.system = params.cacheSystemPrompt\n ? [\n {\n cache_control: { type: \"ephemeral\" },\n text: params.systemPrompt,\n type: \"text\",\n },\n ]\n : params.systemPrompt;\n }\n\n if (params.tools && params.tools.length > 0) {\n body.tools = params.tools.map(mapToolDefinition);\n if (params.toolChoice === \"auto\" || params.toolChoice === \"none\") {\n body.tool_choice = { type: params.toolChoice };\n } else if (params.toolChoice === \"required\") {\n body.tool_choice = { type: \"any\" };\n } else if (params.toolChoice && typeof params.toolChoice === \"object\") {\n body.tool_choice = { name: params.toolChoice.name, type: \"tool\" };\n }\n }\n\n if (typeof params.maxTokens === \"number\") body.max_tokens = params.maxTokens;\n if (params.stopSequences && params.stopSequences.length > 0) {\n body.stop_sequences = params.stopSequences;\n }\n\n const mode = params.reasoning\n ? anthropicReasoningMode(params.model)\n : \"none\";\n const thinkingActive = mode !== \"none\";\n\n // Sampling params (temperature/top_p) are rejected outright by Opus 4.7/4.8 and\n // Fable/Mythos, and conflict with thinking on the models that do accept them —\n // so only send them when the model allows sampling AND thinking is off.\n if (!thinkingActive && anthropicSupportsSampling(params.model)) {\n if (typeof params.temperature === \"number\") {\n body.temperature = params.temperature;\n }\n if (typeof params.topP === \"number\") body.top_p = params.topP;\n }\n\n if (mode === \"effort\" || mode === \"adaptive\") {\n body.thinking = { type: \"adaptive\" };\n if (mode === \"effort\" && params.reasoning) {\n const effort = anthropicEffortValue(params.model, params.reasoning);\n if (effort) body.output_config = { effort };\n }\n } else if (mode === \"legacy\" && params.reasoning) {\n const budget = resolveBudgetTokens(params.reasoning);\n if (budget) {\n body.thinking = { budget_tokens: budget, type: \"enabled\" };\n // Extended thinking requires headroom: budget tokens + room to answer.\n body.max_tokens = Math.max(\n typeof body.max_tokens === \"number\" ? body.max_tokens : MAX_TOKENS,\n budget + MAX_TOKENS,\n );\n }\n }\n\n return body;\n};\n\nconst classifyLine = (line: string) => {\n if (line.startsWith(\"event: \")) {\n return {\n field: \"event\" as const,\n value: line.slice(EVENT_PREFIX_LENGTH),\n };\n }\n\n if (line.startsWith(\"data: \")) {\n return {\n field: \"data\" as const,\n value: line.slice(DATA_PREFIX_LENGTH),\n };\n }\n\n return undefined;\n};\n\nconst applyClassified = (\n acc: { eventData: string; eventType: string },\n classified: { field: \"event\" | \"data\"; value: string } | undefined,\n) => {\n if (!classified) {\n return acc;\n }\n\n if (classified.field === \"event\") {\n return { eventData: acc.eventData, eventType: classified.value };\n }\n\n return { eventData: classified.value, eventType: acc.eventType };\n};\n\nconst parseEventLines = (event: string) =>\n event\n .split(\"\\n\")\n .reduce((acc, line) => applyClassified(acc, classifyLine(line)), {\n eventData: \"\",\n eventType: \"\",\n });\n\nconst safeParse = (text: string) => {\n try {\n const result: unknown = JSON.parse(text);\n\n return result;\n } catch {\n return undefined;\n }\n};\n\nconst tryParseJson = (text: string) => {\n const result = safeParse(text);\n\n if (isRecord(result)) {\n return result;\n }\n\n return undefined;\n};\n\nconst getRecord = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (isRecord(val)) {\n return val;\n }\n\n return undefined;\n};\n\nconst getString = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (typeof val === \"string\") {\n return val;\n }\n\n return \"\";\n};\n\nconst getNumber = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (typeof val === \"number\") {\n return val;\n }\n\n return 0;\n};\n\nconst handleContentBlockStart = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const block = getRecord(parsed, \"content_block\");\n\n if (block && block.type === \"tool_use\") {\n state.currentToolId = getString(block, \"id\");\n state.currentToolName = getString(block, \"name\");\n state.toolInputJson = \"\";\n state.isThinkingBlock = false;\n } else if (block && block.type === \"thinking\") {\n state.isThinkingBlock = true;\n state.thinkingSignature = \"\";\n } else {\n state.isThinkingBlock = false;\n }\n};\n\nconst handleContentBlockDelta = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const delta = getRecord(parsed, \"delta\");\n\n if (!delta) {\n return undefined;\n }\n\n if (delta.type === \"thinking_delta\") {\n return {\n content: getString(delta, \"thinking\"),\n type: \"thinking\",\n } satisfies AIChunk;\n }\n\n if (delta.type === \"text_delta\") {\n return {\n content: getString(delta, \"text\"),\n type: \"text\",\n } satisfies AIChunk;\n }\n\n if (delta.type === \"input_json_delta\") {\n state.toolInputJson += getString(delta, \"partial_json\");\n }\n\n if (delta.type === \"signature_delta\") {\n state.thinkingSignature += getString(delta, \"signature\");\n }\n\n return undefined;\n};\n\nconst handleContentBlockStop = (state: AnthropicSSEState) => {\n // Emit thinking signature when thinking block completes\n if (state.isThinkingBlock && state.thinkingSignature) {\n state.isThinkingBlock = false;\n const signature = state.thinkingSignature;\n state.thinkingSignature = \"\";\n\n return {\n content: \"\",\n signature,\n type: \"thinking\",\n } satisfies AIChunk;\n }\n\n if (!state.currentToolId) {\n return undefined;\n }\n\n const input = tryParseJson(state.toolInputJson) ?? state.toolInputJson;\n\n const chunk: AIChunk = {\n id: state.currentToolId,\n input,\n name: state.currentToolName,\n type: \"tool_use\",\n };\n\n state.currentToolId = \"\";\n state.currentToolName = \"\";\n state.toolInputJson = \"\";\n\n return chunk;\n};\n\nconst extractUsage = (\n usageRecord: Record<string, unknown> | undefined,\n existingUsage: AIUsage | undefined,\n) => {\n if (!usageRecord) {\n return existingUsage;\n }\n\n return {\n cacheReadInputTokens:\n getNumber(usageRecord, \"cache_read_input_tokens\") ||\n existingUsage?.cacheReadInputTokens ||\n 0,\n cacheWriteInputTokens:\n getNumber(usageRecord, \"cache_creation_input_tokens\") ||\n existingUsage?.cacheWriteInputTokens ||\n 0,\n inputTokens:\n getNumber(usageRecord, \"input_tokens\") || existingUsage?.inputTokens || 0,\n outputTokens:\n getNumber(usageRecord, \"output_tokens\") ||\n existingUsage?.outputTokens ||\n 0,\n };\n};\n\nconst handleMessageDelta = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const deltaUsage = getRecord(parsed, \"usage\");\n state.usage = extractUsage(deltaUsage, state.usage);\n};\n\nconst handleMessageStart = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const message = getRecord(parsed, \"message\");\n\n if (!message) {\n return;\n }\n\n const startUsage = getRecord(message, \"usage\");\n state.usage = extractUsage(startUsage, state.usage);\n};\n\nconst handleError = (parsed: Record<string, unknown>) => {\n const error = getRecord(parsed, \"error\");\n const errorMessage = error ? getString(error, \"message\") : \"\";\n\n throw new Error(errorMessage || \"Anthropic API error\");\n};\n\nconst processEvent = (\n eventType: string,\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n switch (eventType) {\n case \"content_block_start\": {\n handleContentBlockStart(parsed, state);\n\n return undefined;\n }\n\n case \"content_block_delta\": {\n return handleContentBlockDelta(parsed, state);\n }\n\n case \"content_block_stop\": {\n return handleContentBlockStop(state);\n }\n\n case \"message_delta\": {\n handleMessageDelta(parsed, state);\n\n return undefined;\n }\n\n case \"message_start\": {\n handleMessageStart(parsed, state);\n\n return undefined;\n }\n\n case \"message_stop\": {\n return { type: \"done\" as const, usage: state.usage };\n }\n\n case \"error\": {\n handleError(parsed);\n\n return undefined;\n }\n\n default: {\n return undefined;\n }\n }\n};\n\nconst processSingleEvent = (event: string, state: AnthropicSSEState) => {\n if (!event.trim()) {\n return undefined;\n }\n\n const { eventData, eventType } = parseEventLines(event);\n\n if (!eventData) {\n return undefined;\n }\n\n const parsed = tryParseJson(eventData);\n\n if (!parsed) {\n return undefined;\n }\n\n return processEvent(eventType, parsed, state);\n};\n\nconst collectChunk = (event: string, state: AnthropicSSEState) => {\n const chunk = processSingleEvent(event, state);\n\n return chunk ? [chunk] : [];\n};\n\nconst processBufferedEvents = (\n eventsText: string,\n state: AnthropicSSEState,\n) => {\n const events = eventsText.split(\"\\n\\n\");\n state.buffer = events.pop() ?? \"\";\n\n return events.flatMap((event) => collectChunk(event, state));\n};\n\nconst readNextChunks = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) => {\n if (signal?.aborted) {\n return { chunks: EMPTY_CHUNKS, done: true };\n }\n\n const { done, value } = await reader.read();\n\n if (done) {\n return { chunks: EMPTY_CHUNKS, done: true };\n }\n\n const rawText = state.buffer + decoder.decode(value, { stream: true });\n const chunks = processBufferedEvents(rawText, state);\n\n return { chunks, done: false };\n};\n\nconst findDoneChunk = (chunks: AIChunk[]) =>\n chunks.findIndex((c) => c.type === \"done\");\n\nconst sseStreamLoop = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) => {\n const result = await readNextChunks(reader, decoder, state, signal);\n\n if (result.done) {\n return { chunks: result.chunks, finished: true };\n }\n\n const doneIdx = findDoneChunk(result.chunks);\n\n if (doneIdx >= 0) {\n return { chunks: result.chunks.slice(0, doneIdx + 1), finished: true };\n }\n\n return { chunks: result.chunks, finished: false };\n};\n\n// eslint-disable-next-line func-style\nasync function* streamChunks(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) {\n let finished = false;\n\n while (!finished) {\n // eslint-disable-next-line no-await-in-loop\n const result = await sseStreamLoop(reader, decoder, state, signal);\n ({ finished } = result);\n yield* result.chunks;\n }\n}\n\n// eslint-disable-next-line func-style\nasync function* parseSSEStream(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n\n const state: AnthropicSSEState = {\n buffer: \"\",\n currentToolId: \"\",\n currentToolName: \"\",\n isThinkingBlock: false,\n thinkingSignature: \"\",\n toolInputJson: \"\",\n usage: undefined,\n };\n\n try {\n yield* streamChunks(reader, decoder, state, signal);\n } finally {\n reader.releaseLock();\n }\n}\n\nconst fetchAndStream = async function* (\n baseUrl: string,\n config: AnthropicConfig,\n params: AIProviderStreamParams,\n) {\n const body = buildRequestBody(params);\n\n const target = `${baseUrl}/v1/messages`;\n const response = await fetch(target, {\n ...h2IfHttps(target),\n body: JSON.stringify(body),\n headers: {\n \"anthropic-version\": API_VERSION,\n \"Content-Type\": \"application/json\",\n \"x-api-key\": config.apiKey,\n },\n method: \"POST\",\n signal: params.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n\n throw new Error(`Anthropic API error ${response.status}: ${errorText}`);\n }\n\n if (!response.body) {\n throw new Error(\"Anthropic API returned no response body\");\n }\n\n yield* parseSSEStream(response.body, params.signal);\n};\n\nexport const anthropic = (config: AnthropicConfig): AIProviderConfig => {\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n return instrumentAIProvider(\n {\n stream: (params: AIProviderStreamParams) =>\n fetchAndStream(baseUrl, config, params),\n },\n \"anthropic\",\n );\n};\n",
13
+ "import type {\n AIChunk,\n AIProviderConfig,\n AIProviderContentBlock,\n AIProviderMessage,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n AIUsage,\n} from \"../../../types/ai\";\nimport type {\n AnthropicConfig,\n AnthropicMessage,\n AnthropicSSEState,\n} from \"../../../types/anthropic\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// The `protocol` option lands in @types/bun 1.3.14; widen locally for now.\n// Hard-skip on non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\n\nimport { instrumentAIProvider } from \"./instrumentation\";\nimport { ProviderError } from \"../errors/providerError\";\nimport {\n anthropicEffortValue,\n anthropicReasoningMode,\n anthropicSupportsSampling,\n resolveBudgetTokens,\n} from \"./reasoning\";\n\nconst DEFAULT_BASE_URL = \"https://api.anthropic.com\";\nconst API_VERSION = \"2023-06-01\";\nconst MAX_TOKENS = 8192;\nconst EVENT_PREFIX_LENGTH = 7;\nconst DATA_PREFIX_LENGTH = 6;\n\nconst EMPTY_CHUNKS: AIChunk[] = [];\n\nconst isRecord = (val: unknown): val is Record<string, unknown> =>\n typeof val === \"object\" && val !== null;\n\nconst mapContentBlock = (block: AIProviderContentBlock) => {\n if (block.type === \"thinking\") {\n return {\n signature: block.signature,\n thinking: block.thinking,\n type: \"thinking\",\n };\n }\n\n if (block.type === \"image\") {\n return {\n source: block.source,\n type: \"image\",\n };\n }\n\n if (block.type === \"document\") {\n return {\n source: block.source,\n type: \"document\",\n };\n }\n\n if (block.type === \"tool_result\") {\n return {\n content: block.content,\n tool_use_id: block.tool_use_id,\n type: \"tool_result\",\n };\n }\n\n if (block.type === \"tool_use\") {\n return {\n id: block.id,\n input: block.input,\n name: block.name,\n type: \"tool_use\",\n };\n }\n\n return { text: block.content, type: \"text\" };\n};\n\nconst mapMessage = (msg: AIProviderMessage): AnthropicMessage => ({\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : msg.content.map(mapContentBlock),\n role: msg.role === \"system\" ? \"user\" : msg.role,\n});\n\nconst mapToolDefinition = (tool: AIProviderToolDefinition) => ({\n description: tool.description,\n input_schema: tool.input_schema,\n name: tool.name,\n});\n\nconst buildRequestBody = (params: AIProviderStreamParams) => {\n const messages: AnthropicMessage[] = params.messages\n .filter((msg) => msg.role !== \"system\")\n .map(mapMessage);\n\n const body: Record<string, unknown> = {\n max_tokens: MAX_TOKENS,\n messages,\n model: params.model,\n stream: true,\n };\n\n if (params.systemPrompt) {\n body.system = params.cacheSystemPrompt\n ? [\n {\n cache_control: { type: \"ephemeral\" },\n text: params.systemPrompt,\n type: \"text\",\n },\n ]\n : params.systemPrompt;\n }\n\n if (params.tools && params.tools.length > 0) {\n body.tools = params.tools.map(mapToolDefinition);\n if (params.toolChoice === \"auto\" || params.toolChoice === \"none\") {\n body.tool_choice = { type: params.toolChoice };\n } else if (params.toolChoice === \"required\") {\n body.tool_choice = { type: \"any\" };\n } else if (params.toolChoice && typeof params.toolChoice === \"object\") {\n body.tool_choice = { name: params.toolChoice.name, type: \"tool\" };\n }\n }\n\n if (typeof params.maxTokens === \"number\") body.max_tokens = params.maxTokens;\n if (params.stopSequences && params.stopSequences.length > 0) {\n body.stop_sequences = params.stopSequences;\n }\n\n const mode = params.reasoning ? anthropicReasoningMode(params.model) : \"none\";\n const thinkingActive = mode !== \"none\";\n\n // Sampling params (temperature/top_p) are rejected outright by Opus 4.7/4.8 and\n // Fable/Mythos, and conflict with thinking on the models that do accept them —\n // so only send them when the model allows sampling AND thinking is off.\n if (!thinkingActive && anthropicSupportsSampling(params.model)) {\n if (typeof params.temperature === \"number\") {\n body.temperature = params.temperature;\n }\n if (typeof params.topP === \"number\") body.top_p = params.topP;\n }\n\n if (mode === \"effort\" || mode === \"adaptive\") {\n body.thinking = { type: \"adaptive\" };\n if (mode === \"effort\" && params.reasoning) {\n const effort = anthropicEffortValue(params.model, params.reasoning);\n if (effort) body.output_config = { effort };\n }\n } else if (mode === \"legacy\" && params.reasoning) {\n const budget = resolveBudgetTokens(params.reasoning);\n if (budget) {\n body.thinking = { budget_tokens: budget, type: \"enabled\" };\n // Extended thinking requires headroom: budget tokens + room to answer.\n body.max_tokens = Math.max(\n typeof body.max_tokens === \"number\" ? body.max_tokens : MAX_TOKENS,\n budget + MAX_TOKENS,\n );\n }\n }\n\n return body;\n};\n\nconst classifyLine = (line: string) => {\n if (line.startsWith(\"event: \")) {\n return {\n field: \"event\" as const,\n value: line.slice(EVENT_PREFIX_LENGTH),\n };\n }\n\n if (line.startsWith(\"data: \")) {\n return {\n field: \"data\" as const,\n value: line.slice(DATA_PREFIX_LENGTH),\n };\n }\n\n return undefined;\n};\n\nconst applyClassified = (\n acc: { eventData: string; eventType: string },\n classified: { field: \"event\" | \"data\"; value: string } | undefined,\n) => {\n if (!classified) {\n return acc;\n }\n\n if (classified.field === \"event\") {\n return { eventData: acc.eventData, eventType: classified.value };\n }\n\n return { eventData: classified.value, eventType: acc.eventType };\n};\n\nconst parseEventLines = (event: string) =>\n event\n .split(\"\\n\")\n .reduce((acc, line) => applyClassified(acc, classifyLine(line)), {\n eventData: \"\",\n eventType: \"\",\n });\n\nconst safeParse = (text: string) => {\n try {\n const result: unknown = JSON.parse(text);\n\n return result;\n } catch {\n return undefined;\n }\n};\n\nconst tryParseJson = (text: string) => {\n const result = safeParse(text);\n\n if (isRecord(result)) {\n return result;\n }\n\n return undefined;\n};\n\nconst getRecord = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (isRecord(val)) {\n return val;\n }\n\n return undefined;\n};\n\nconst getString = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (typeof val === \"string\") {\n return val;\n }\n\n return \"\";\n};\n\nconst getNumber = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (typeof val === \"number\") {\n return val;\n }\n\n return 0;\n};\n\nconst handleContentBlockStart = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const block = getRecord(parsed, \"content_block\");\n\n if (block && block.type === \"tool_use\") {\n state.currentToolId = getString(block, \"id\");\n state.currentToolName = getString(block, \"name\");\n state.toolInputJson = \"\";\n state.isThinkingBlock = false;\n } else if (block && block.type === \"thinking\") {\n state.isThinkingBlock = true;\n state.thinkingSignature = \"\";\n } else {\n state.isThinkingBlock = false;\n }\n};\n\nconst handleContentBlockDelta = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const delta = getRecord(parsed, \"delta\");\n\n if (!delta) {\n return undefined;\n }\n\n if (delta.type === \"thinking_delta\") {\n return {\n content: getString(delta, \"thinking\"),\n type: \"thinking\",\n } satisfies AIChunk;\n }\n\n if (delta.type === \"text_delta\") {\n return {\n content: getString(delta, \"text\"),\n type: \"text\",\n } satisfies AIChunk;\n }\n\n if (delta.type === \"input_json_delta\") {\n state.toolInputJson += getString(delta, \"partial_json\");\n }\n\n if (delta.type === \"signature_delta\") {\n state.thinkingSignature += getString(delta, \"signature\");\n }\n\n return undefined;\n};\n\nconst handleContentBlockStop = (state: AnthropicSSEState) => {\n // Emit thinking signature when thinking block completes\n if (state.isThinkingBlock && state.thinkingSignature) {\n state.isThinkingBlock = false;\n const signature = state.thinkingSignature;\n state.thinkingSignature = \"\";\n\n return {\n content: \"\",\n signature,\n type: \"thinking\",\n } satisfies AIChunk;\n }\n\n if (!state.currentToolId) {\n return undefined;\n }\n\n const input = tryParseJson(state.toolInputJson) ?? state.toolInputJson;\n\n const chunk: AIChunk = {\n id: state.currentToolId,\n input,\n name: state.currentToolName,\n type: \"tool_use\",\n };\n\n state.currentToolId = \"\";\n state.currentToolName = \"\";\n state.toolInputJson = \"\";\n\n return chunk;\n};\n\nconst extractUsage = (\n usageRecord: Record<string, unknown> | undefined,\n existingUsage: AIUsage | undefined,\n) => {\n if (!usageRecord) {\n return existingUsage;\n }\n\n return {\n cacheReadInputTokens:\n getNumber(usageRecord, \"cache_read_input_tokens\") ||\n existingUsage?.cacheReadInputTokens ||\n 0,\n cacheWriteInputTokens:\n getNumber(usageRecord, \"cache_creation_input_tokens\") ||\n existingUsage?.cacheWriteInputTokens ||\n 0,\n inputTokens:\n getNumber(usageRecord, \"input_tokens\") || existingUsage?.inputTokens || 0,\n outputTokens:\n getNumber(usageRecord, \"output_tokens\") ||\n existingUsage?.outputTokens ||\n 0,\n };\n};\n\nconst handleMessageDelta = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const deltaUsage = getRecord(parsed, \"usage\");\n state.usage = extractUsage(deltaUsage, state.usage);\n};\n\nconst handleMessageStart = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const message = getRecord(parsed, \"message\");\n\n if (!message) {\n return;\n }\n\n const startUsage = getRecord(message, \"usage\");\n state.usage = extractUsage(startUsage, state.usage);\n};\n\nconst handleError = (parsed: Record<string, unknown>) => {\n const error = getRecord(parsed, \"error\");\n const errorMessage = error ? getString(error, \"message\") : \"\";\n const errorType = error ? getString(error, \"type\") : \"\";\n\n // Mid-stream error events (e.g. \"overloaded_error\") — overloaded/rate-limit\n // types are retryable; everything else is treated as a hard failure.\n const retryable =\n errorType === \"overloaded_error\" ||\n errorType === \"rate_limit_error\" ||\n errorType === \"api_error\";\n\n throw new ProviderError({\n message: errorMessage || \"Anthropic API error\",\n provider: \"anthropic\",\n retryable,\n type: errorType || null,\n });\n};\n\nconst processEvent = (\n eventType: string,\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n switch (eventType) {\n case \"content_block_start\": {\n handleContentBlockStart(parsed, state);\n\n return undefined;\n }\n\n case \"content_block_delta\": {\n return handleContentBlockDelta(parsed, state);\n }\n\n case \"content_block_stop\": {\n return handleContentBlockStop(state);\n }\n\n case \"message_delta\": {\n handleMessageDelta(parsed, state);\n\n return undefined;\n }\n\n case \"message_start\": {\n handleMessageStart(parsed, state);\n\n return undefined;\n }\n\n case \"message_stop\": {\n return { type: \"done\" as const, usage: state.usage };\n }\n\n case \"error\": {\n handleError(parsed);\n\n return undefined;\n }\n\n default: {\n return undefined;\n }\n }\n};\n\nconst processSingleEvent = (event: string, state: AnthropicSSEState) => {\n if (!event.trim()) {\n return undefined;\n }\n\n const { eventData, eventType } = parseEventLines(event);\n\n if (!eventData) {\n return undefined;\n }\n\n const parsed = tryParseJson(eventData);\n\n if (!parsed) {\n return undefined;\n }\n\n return processEvent(eventType, parsed, state);\n};\n\nconst collectChunk = (event: string, state: AnthropicSSEState) => {\n const chunk = processSingleEvent(event, state);\n\n return chunk ? [chunk] : [];\n};\n\nconst processBufferedEvents = (\n eventsText: string,\n state: AnthropicSSEState,\n) => {\n const events = eventsText.split(\"\\n\\n\");\n state.buffer = events.pop() ?? \"\";\n\n return events.flatMap((event) => collectChunk(event, state));\n};\n\nconst readNextChunks = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) => {\n if (signal?.aborted) {\n return { chunks: EMPTY_CHUNKS, done: true };\n }\n\n const { done, value } = await reader.read();\n\n if (done) {\n return { chunks: EMPTY_CHUNKS, done: true };\n }\n\n const rawText = state.buffer + decoder.decode(value, { stream: true });\n const chunks = processBufferedEvents(rawText, state);\n\n return { chunks, done: false };\n};\n\nconst findDoneChunk = (chunks: AIChunk[]) =>\n chunks.findIndex((c) => c.type === \"done\");\n\nconst sseStreamLoop = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) => {\n const result = await readNextChunks(reader, decoder, state, signal);\n\n if (result.done) {\n return { chunks: result.chunks, finished: true };\n }\n\n const doneIdx = findDoneChunk(result.chunks);\n\n if (doneIdx >= 0) {\n return { chunks: result.chunks.slice(0, doneIdx + 1), finished: true };\n }\n\n return { chunks: result.chunks, finished: false };\n};\n\n// eslint-disable-next-line func-style\nasync function* streamChunks(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) {\n let finished = false;\n\n while (!finished) {\n // eslint-disable-next-line no-await-in-loop\n const result = await sseStreamLoop(reader, decoder, state, signal);\n ({ finished } = result);\n yield* result.chunks;\n }\n}\n\n// eslint-disable-next-line func-style\nasync function* parseSSEStream(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n\n const state: AnthropicSSEState = {\n buffer: \"\",\n currentToolId: \"\",\n currentToolName: \"\",\n isThinkingBlock: false,\n thinkingSignature: \"\",\n toolInputJson: \"\",\n usage: undefined,\n };\n\n try {\n yield* streamChunks(reader, decoder, state, signal);\n } finally {\n reader.releaseLock();\n }\n}\n\nconst fetchAndStream = async function* (\n baseUrl: string,\n config: AnthropicConfig,\n params: AIProviderStreamParams,\n) {\n const body = buildRequestBody(params);\n\n const target = `${baseUrl}/v1/messages`;\n const response = await fetch(target, {\n ...h2IfHttps(target),\n body: JSON.stringify(body),\n headers: {\n \"anthropic-version\": API_VERSION,\n \"Content-Type\": \"application/json\",\n \"x-api-key\": config.apiKey,\n },\n method: \"POST\",\n signal: params.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n\n throw ProviderError.fromResponse(\"anthropic\", response.status, errorText);\n }\n\n if (!response.body) {\n throw new ProviderError({\n message: \"Anthropic API returned no response body\",\n provider: \"anthropic\",\n retryable: true,\n });\n }\n\n yield* parseSSEStream(response.body, params.signal);\n};\n\nexport const anthropic = (config: AnthropicConfig): AIProviderConfig => {\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n return instrumentAIProvider(\n {\n stream: (params: AIProviderStreamParams) =>\n fetchAndStream(baseUrl, config, params),\n },\n \"anthropic\",\n );\n};\n",
12
14
  "import type {\n AIChunk,\n AIDoneChunk,\n AIProviderConfig,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n} from \"../../../types/ai\";\nimport { instrumentAIProvider } from \"./instrumentation\";\n\ntype OllamaConfig = {\n baseUrl?: string;\n};\n\ntype OllamaMessage = {\n content: string;\n role: \"assistant\" | \"system\" | \"tool\" | \"user\";\n tool_calls?: Array<{\n function: { arguments: Record<string, unknown>; name: string };\n }>;\n};\n\nconst DEFAULT_BASE_URL = \"http://localhost:11434\";\nconst ZERO_TOKENS = 0;\n\nconst DONE_CHUNK: AIChunk = { type: \"done\" };\n\nconst mapToolDefinitions = (tools: AIProviderToolDefinition[]) =>\n tools.map((tool) => ({\n function: {\n description: tool.description,\n name: tool.name,\n parameters: tool.input_schema,\n },\n type: \"function\",\n }));\n\nconst convertMessage = (msg: AIProviderStreamParams[\"messages\"][number]) => {\n if (typeof msg.content === \"string\") {\n return [{ content: msg.content, role: msg.role }];\n }\n\n const results: OllamaMessage[] = [];\n const toolUseBlocks = msg.content.filter(\n (block) => block.type === \"tool_use\",\n );\n const toolResultBlocks = msg.content.filter(\n (block) => block.type === \"tool_result\",\n );\n\n if (toolUseBlocks.length > 0) {\n results.push({\n content: \"\",\n role: \"assistant\",\n tool_calls: toolUseBlocks.map((block) => ({\n function: {\n arguments:\n typeof block.input === \"object\" && block.input !== null\n ? { ...block.input }\n : {},\n name: block.name,\n },\n })),\n });\n }\n\n for (const block of toolResultBlocks) {\n results.push({\n content: typeof block.content === \"string\" ? block.content : \"\",\n role: \"tool\",\n });\n }\n\n return results;\n};\n\nconst buildRequestBody = (params: AIProviderStreamParams) => {\n const messages: OllamaMessage[] = params.messages.flatMap(convertMessage);\n\n if (params.systemPrompt) {\n messages.unshift({ content: params.systemPrompt, role: \"system\" });\n }\n\n const body: Record<string, unknown> = {\n messages,\n model: params.model,\n stream: true,\n };\n\n if (params.tools && params.tools.length > 0) {\n body.tools = mapToolDefinitions(params.tools);\n }\n\n const options: Record<string, unknown> = {};\n if (typeof params.temperature === \"number\") options.temperature = params.temperature;\n if (typeof params.topP === \"number\") options.top_p = params.topP;\n if (typeof params.maxTokens === \"number\") options.num_predict = params.maxTokens;\n if (params.stopSequences && params.stopSequences.length > 0) options.stop = params.stopSequences;\n if (typeof params.seed === \"number\") options.seed = params.seed;\n if (typeof params.frequencyPenalty === \"number\") options.frequency_penalty = params.frequencyPenalty;\n if (typeof params.presencePenalty === \"number\") options.presence_penalty = params.presencePenalty;\n if (Object.keys(options).length > 0) {\n body.options = options;\n }\n\n if (params.responseFormat?.type === \"json_object\") {\n body.format = \"json\";\n } else if (params.responseFormat?.type === \"json_schema\") {\n body.format = params.responseFormat.schema;\n }\n\n return body;\n};\n\nconst isRecord = (val: unknown): val is Record<string, unknown> =>\n val !== null && typeof val === \"object\" && !Array.isArray(val);\n\nconst tryParseJSON = (text: string) => {\n try {\n const result: unknown = JSON.parse(text);\n if (isRecord(result)) {\n return result;\n }\n\n return null;\n } catch {\n return null;\n }\n};\n\nconst buildDoneChunk = (parsed: Record<string, unknown>): AIDoneChunk => {\n const promptEvalCount =\n typeof parsed.prompt_eval_count === \"number\"\n ? parsed.prompt_eval_count\n : undefined;\n const evalCount =\n typeof parsed.eval_count === \"number\" ? parsed.eval_count : undefined;\n const totalDuration =\n typeof parsed.total_duration === \"number\"\n ? parsed.total_duration\n : undefined;\n\n const hasTokenCounts =\n promptEvalCount !== undefined || evalCount !== undefined;\n if (hasTokenCounts) {\n return {\n type: \"done\",\n usage: {\n inputTokens: promptEvalCount ?? ZERO_TOKENS,\n outputTokens: evalCount ?? ZERO_TOKENS,\n },\n };\n }\n\n if (totalDuration !== undefined) {\n return {\n type: \"done\",\n usage: { inputTokens: ZERO_TOKENS, outputTokens: ZERO_TOKENS },\n };\n }\n\n return { type: \"done\" };\n};\n\nconst buildTextChunk = (content: string): AIChunk => ({\n content,\n type: \"text\",\n});\n\nconst extractToolCalls = (message: Record<string, unknown>) => {\n const toolCalls = message.tool_calls;\n\n if (!Array.isArray(toolCalls) || toolCalls.length === 0) {\n return [];\n }\n\n return toolCalls\n .filter(isRecord)\n .filter((call) => isRecord(call.function))\n .map((call) => {\n const func = call.function;\n\n if (!isRecord(func)) {\n return {\n id: crypto.randomUUID(),\n input: {},\n name: \"\",\n type: \"tool_use\" as const,\n };\n }\n\n return {\n id: crypto.randomUUID(),\n input: func.arguments ?? {},\n name: typeof func.name === \"string\" ? func.name : \"\",\n type: \"tool_use\" as const,\n };\n });\n};\n\nconst extractChunks = (parsed: Record<string, unknown>) => {\n const { message } = parsed;\n\n if (!isRecord(message)) {\n return [];\n }\n\n const toolChunks = extractToolCalls(message);\n\n if (toolChunks.length > 0) {\n return toolChunks;\n }\n\n const { content } = message;\n\n if (typeof content !== \"string\" || !content) {\n return [];\n }\n\n return [buildTextChunk(content)];\n};\n\nconst processLine = (line: string) => {\n const trimmed = line.trim();\n\n if (!trimmed) {\n return [];\n }\n\n const parsed = tryParseJSON(trimmed);\n\n if (!parsed) {\n return [];\n }\n\n if (parsed.done === true) {\n return [buildDoneChunk(parsed)];\n }\n\n return extractChunks(parsed);\n};\n\nconst processBufferedLines = (lines: string[]) => lines.flatMap(processLine);\n\nconst readStreamChunks = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n buffer: string,\n signal?: AbortSignal,\n) => {\n const emptyChunks: AIChunk[] = [];\n\n if (signal?.aborted) {\n return {\n allChunks: emptyChunks,\n currentBuffer: buffer,\n finished: true,\n };\n }\n\n const result = await reader.read();\n const { done, value } = result;\n\n if (done) {\n return {\n allChunks: emptyChunks,\n currentBuffer: buffer,\n finished: true,\n };\n }\n\n const currentBuffer = buffer + decoder.decode(value, { stream: true });\n const lines = currentBuffer.split(\"\\n\");\n const remainder = lines.pop() ?? \"\";\n const allChunks = processBufferedLines(lines);\n const finished = allChunks.some((c) => c.type === \"done\");\n\n return { allChunks, currentBuffer: remainder, finished };\n};\n\nconst parseNDJSONStream = async function* (\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n\n try {\n yield* parseNDJSONStreamInner(reader, signal);\n } finally {\n reader.releaseLock();\n }\n};\n\nconst parseNDJSONStreamInner = async function* (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n signal?: AbortSignal,\n) {\n const decoder = new TextDecoder();\n let buffer = \"\";\n let done = false;\n\n while (!done) {\n // eslint-disable-next-line no-await-in-loop\n const result = await readStreamChunks(reader, decoder, buffer, signal);\n buffer = result.currentBuffer;\n done = result.finished;\n\n yield* result.allChunks;\n }\n\n yield DONE_CHUNK;\n};\n\nconst fetchAndStream = async function* (\n baseUrl: string,\n params: AIProviderStreamParams,\n) {\n const requestBody = buildRequestBody(params);\n\n const response = await fetch(`${baseUrl}/api/chat`, {\n body: JSON.stringify(requestBody),\n headers: { \"Content-Type\": \"application/json\" },\n method: \"POST\",\n signal: params.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Ollama API error ${response.status}: ${errorText}`);\n }\n\n if (!response.body) {\n throw new Error(\"Ollama API returned no response body\");\n }\n\n yield* parseNDJSONStream(response.body, params.signal);\n};\n\nexport const ollama = (config: OllamaConfig = {}): AIProviderConfig => {\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n return instrumentAIProvider(\n {\n stream: (params: AIProviderStreamParams) =>\n fetchAndStream(baseUrl, params),\n },\n \"ollama\",\n );\n};\n",
13
15
  "import { Elysia } from \"elysia\";\nimport type {\n AIAttachment,\n AIChatPluginConfig,\n AIConversation,\n AIConversationStore,\n AIMessage,\n} from \"../../types/ai\";\nimport { createMemoryStore } from \"../ai/memoryStore\";\nimport { generateId, parseAIMessage } from \"../ai/protocol\";\nimport { streamAI } from \"../ai/streamAI\";\nimport { streamAIToSSE } from \"../ai/streamAIToSSE\";\nimport { resolveRenderers } from \"../ai/htmxRenderers\";\nimport { EXCLUDE_LAST_OFFSET } from \"../constants\";\n\nconst DEFAULT_PATH = \"/chat\";\nconst MAX_PREFIX_LEN = 12;\nconst TITLE_MAX_LENGTH = 80;\nconst NOT_FOUND = -1;\n\nconst defaultParseProvider = (content: string) => {\n const colonIdx = content.indexOf(\":\");\n const hasPrefix = colonIdx > 0 && colonIdx < MAX_PREFIX_LEN;\n\n return {\n content: hasPrefix ? content.slice(colonIdx + 1) : content,\n providerName: hasPrefix ? content.slice(0, colonIdx) : \"anthropic\",\n };\n};\n\nconst appendMessage = (conversation: AIConversation, message: AIMessage) => {\n conversation.messages.push(message);\n conversation.lastMessageAt = Date.now();\n\n if (!conversation.title && message.role === \"user\") {\n conversation.title = message.content.slice(0, TITLE_MAX_LENGTH);\n }\n};\n\nconst getHistory = (conversation: AIConversation) =>\n conversation.messages.map((msg) => ({\n content: msg.content,\n role: msg.role,\n }));\n\nconst branchConversation = (source: AIConversation, fromMessageId: string) => {\n const cutoffIndex = source.messages.findIndex(\n (msg) => msg.id === fromMessageId,\n );\n\n if (cutoffIndex === NOT_FOUND) {\n return null;\n }\n\n const newId = generateId();\n const branchedMessages = source.messages\n .slice(0, cutoffIndex + 1)\n .map((msg) => ({ ...msg, conversationId: newId }));\n\n const newConversation: AIConversation = {\n createdAt: Date.now(),\n id: newId,\n messages: branchedMessages,\n };\n\n return newConversation;\n};\n\nconst buildUserMessage = (content: string, attachments?: AIAttachment[]) => {\n if (attachments && attachments.length > 0) {\n return {\n content: [\n ...attachments.map((att) => {\n if (att.media_type === \"application/pdf\") {\n return {\n name: att.name,\n source: {\n data: att.data,\n media_type: att.media_type,\n type: \"base64\" as const,\n },\n type: \"document\" as const,\n };\n }\n\n return {\n source: {\n data: att.data,\n media_type: att.media_type,\n type: \"base64\" as const,\n },\n type: \"image\" as const,\n };\n }),\n { content, type: \"text\" as const },\n ],\n role: \"user\" as const,\n };\n }\n\n return { content, role: \"user\" as const };\n};\n\nconst resolveModel = (\n config: AIChatPluginConfig,\n parsed: { model?: string; providerName: string },\n) => {\n if (parsed.model) {\n return parsed.model;\n }\n\n if (typeof config.model === \"string\") {\n return config.model;\n }\n\n if (typeof config.model === \"function\") {\n return config.model(parsed.providerName);\n }\n\n return parsed.providerName;\n};\n\nconst resolveTools = (\n config: AIChatPluginConfig,\n providerName: string,\n model: string,\n) =>\n typeof config.tools === \"function\"\n ? config.tools(providerName, model)\n : config.tools;\n\nconst resolveReasoning = (\n config: AIChatPluginConfig,\n providerName: string,\n model: string,\n) =>\n typeof config.reasoning === \"function\"\n ? config.reasoning(providerName, model)\n : config.reasoning;\n\nexport const aiChat = (config: AIChatPluginConfig) => {\n const path = config.path ?? DEFAULT_PATH;\n const store: AIConversationStore = config.store ?? createMemoryStore();\n const parseProvider = config.parseProvider ?? defaultParseProvider;\n const abortControllers = new Map<string, AbortController>();\n\n const handleCancel = (conversationId: string) => {\n const controller = abortControllers.get(conversationId);\n\n if (controller) {\n controller.abort();\n abortControllers.delete(conversationId);\n }\n };\n\n const handleBranch = async (\n ws: { send: (data: string) => void },\n messageId: string,\n conversationId: string,\n ) => {\n const source = await store.get(conversationId);\n\n if (!source) {\n return;\n }\n\n const newConv = branchConversation(source, messageId);\n\n if (newConv) {\n await store.set(newConv.id, newConv);\n ws.send(JSON.stringify({ conversationId: newConv.id, type: \"branched\" }));\n }\n };\n\n const handleUserMessage = async (\n ws: { readyState: number; send: (data: string) => void },\n rawContent: string,\n rawConversationId?: string,\n attachments?: AIAttachment[],\n ) => {\n const conversationId = rawConversationId ?? generateId();\n const messageId = generateId();\n const parsed = parseProvider(rawContent);\n const { content, providerName } = parsed;\n\n const conversation = await store.getOrCreate(conversationId);\n const history = getHistory(conversation);\n\n const controller = new AbortController();\n abortControllers.set(conversationId, controller);\n\n appendMessage(conversation, {\n attachments,\n content,\n conversationId,\n id: messageId,\n role: \"user\",\n timestamp: Date.now(),\n });\n await store.set(conversationId, conversation);\n\n const model = resolveModel(config, parsed);\n const userMessage = buildUserMessage(content, attachments);\n\n await streamAI(ws, conversationId, messageId, {\n maxTurns: config.maxTurns,\n messages: [...history, userMessage],\n model,\n provider: config.provider(providerName),\n signal: controller.signal,\n systemPrompt: config.systemPrompt,\n reasoning: resolveReasoning(config, providerName, model),\n tools: resolveTools(config, providerName, model),\n onComplete: async (fullResponse, usage) => {\n const conv = await store.get(conversationId);\n\n if (conv) {\n appendMessage(conv, {\n content: fullResponse,\n conversationId,\n id: generateId(),\n role: \"assistant\",\n timestamp: Date.now(),\n });\n await store.set(conversationId, conv);\n }\n\n abortControllers.delete(conversationId);\n config.onComplete?.(conversationId, fullResponse, usage);\n },\n });\n };\n\n const htmxRoutes = () => {\n if (!config.htmx) {\n return new Elysia();\n }\n\n const renderers = resolveRenderers(\n typeof config.htmx === \"object\" ? config.htmx.render : undefined,\n );\n\n return new Elysia()\n .post(`${path}/message`, async ({ body }) => {\n const requestBody = body && typeof body === \"object\" ? body : {};\n const rawContent =\n \"content\" in requestBody ? String(requestBody.content) : undefined;\n const rawConvId =\n \"conversationId\" in requestBody\n ? String(requestBody.conversationId)\n : undefined;\n const rawAttachmentsValue =\n \"attachments\" in requestBody ? requestBody.attachments : undefined;\n const rawAttachments: AIAttachment[] | undefined = Array.isArray(\n rawAttachmentsValue,\n )\n ? rawAttachmentsValue\n : undefined;\n\n if (!rawContent) {\n return new Response(\"Missing content\", { status: 400 });\n }\n\n const conversationId = rawConvId || generateId();\n const messageId = generateId();\n const parsed = parseProvider(rawContent);\n const { content } = parsed;\n\n const conversation = await store.getOrCreate(conversationId);\n\n appendMessage(conversation, {\n attachments: rawAttachments,\n content,\n conversationId,\n id: messageId,\n role: \"user\",\n timestamp: Date.now(),\n });\n await store.set(conversationId, conversation);\n\n const sseUrl = `${path}/sse/${conversationId}/${messageId}`;\n\n return new Response(\n `<div id=\"msg-${messageId}\" class=\"message user\">` +\n `<div>${content}</div>` +\n `</div>` +\n `<div id=\"response-${messageId}\" ` +\n `hx-ext=\"sse\" ` +\n `sse-connect=\"${sseUrl}\" ` +\n `hx-swap=\"innerHTML\">` +\n `<div id=\"sse-content-${messageId}\" sse-swap=\"content\" hx-swap=\"innerHTML\"></div>` +\n `<div id=\"sse-thinking-${messageId}\" sse-swap=\"thinking\" hx-swap=\"innerHTML\"></div>` +\n `<div id=\"sse-tools-${messageId}\" sse-swap=\"tools\" hx-swap=\"innerHTML\"></div>` +\n `<div id=\"sse-images-${messageId}\" sse-swap=\"images\" hx-swap=\"innerHTML\"></div>` +\n `<div id=\"sse-status-${messageId}\" sse-swap=\"status\" hx-swap=\"innerHTML\"></div>` +\n `</div>`,\n { headers: { \"Content-Type\": \"text/html\" } },\n );\n })\n .get(\n `${path}/sse/:conversationId/:messageId`,\n async function* ({ params }) {\n const { conversationId, messageId } = params;\n const conversation = await store.get(conversationId);\n\n if (!conversation) {\n yield {\n data: renderers.error(\"Conversation not found\"),\n event: \"status\",\n };\n\n return;\n }\n\n const parsed = parseProvider(\n conversation.messages.at(EXCLUDE_LAST_OFFSET)?.content ?? \"\",\n );\n const { providerName } = parsed;\n const model = resolveModel(config, parsed);\n\n const controller = new AbortController();\n abortControllers.set(conversationId, controller);\n\n const history = getHistory(conversation);\n\n const lastMsg = conversation.messages.at(EXCLUDE_LAST_OFFSET);\n const userMessage = buildUserMessage(\n lastMsg?.content ?? \"\",\n lastMsg?.attachments,\n );\n\n const sseStream = streamAIToSSE(\n conversationId,\n messageId,\n {\n maxTurns: config.maxTurns,\n messages: [...history.slice(0, EXCLUDE_LAST_OFFSET), userMessage],\n model,\n provider: config.provider(providerName),\n signal: controller.signal,\n systemPrompt: config.systemPrompt,\n reasoning: resolveReasoning(config, providerName, model),\n tools: resolveTools(config, providerName, model),\n },\n renderers,\n );\n\n for await (const event of sseStream) {\n yield event;\n }\n\n const conv = await store.get(conversationId);\n\n if (conv) {\n await store.set(conversationId, conv);\n }\n\n abortControllers.delete(conversationId);\n },\n )\n .get(`${path}/history/:conversationId`, async ({ params }) => {\n const conv = await store.get(params.conversationId);\n\n if (!conv) {\n return new Response(\"\", { status: 404 });\n }\n\n const html = conv.messages\n .map(\n (msg) =>\n `<div class=\"message ${msg.role}\"><div>${msg.content}</div></div>`,\n )\n .join(\"\");\n\n return new Response(html, {\n headers: { \"Content-Type\": \"text/html\" },\n });\n })\n .get(`${path}/conversations/list`, async () => {\n const convos = await store.list();\n const html = convos\n .map(\n (c) =>\n `<div class=\"conversation-item\" ` +\n `hx-get=\"${path}/history/${c.id}\" ` +\n `hx-target=\"#messages\" ` +\n `hx-swap=\"innerHTML\">` +\n `<span class=\"title\">${c.title}</span>` +\n `<span class=\"count\">${c.messageCount} messages</span>` +\n `</div>`,\n )\n .join(\"\");\n\n return new Response(\n html || '<div class=\"empty\">No conversations</div>',\n { headers: { \"Content-Type\": \"text/html\" } },\n );\n });\n };\n\n const app = new Elysia()\n .ws(path, {\n message: async (ws, raw) => {\n const msg = parseAIMessage(raw);\n\n if (!msg) {\n return;\n }\n\n if (msg.type === \"cancel\" && msg.conversationId) {\n handleCancel(msg.conversationId);\n\n return;\n }\n\n if (msg.type === \"branch\") {\n await handleBranch(ws, msg.messageId, msg.conversationId);\n\n return;\n }\n\n if (msg.type === \"message\") {\n await handleUserMessage(\n ws,\n msg.content,\n msg.conversationId,\n msg.attachments,\n );\n }\n },\n })\n .get(`${path}/conversations`, () => store.list())\n .get(`${path}/conversations/:id`, async ({ params }) => {\n const conv = await store.get(params.id);\n\n if (!conv) {\n return new Response(\"Not found\", { status: 404 });\n }\n\n return {\n id: conv.id,\n messages: conv.messages,\n title: conv.title ?? \"Untitled\",\n };\n })\n .delete(`${path}/conversations/:id`, async ({ params }) => {\n await store.remove(params.id);\n\n return { ok: true };\n })\n .use(htmxRoutes());\n\n // aiChat mounts chat/SSE/WS routes whose paths are CONFIGURABLE (config.path\n // → Elysia keys them by `string`) and the htmx branch is a conditional union\n // — so the inferred return both can't be precisely typed and explodes a\n // consumer's server type. It exposes no global context, so the honest public\n // type is a base Elysia (routes reached by path at runtime).\n return app as unknown as Elysia;\n};\n",
14
16
  "import type { AIConversation, AIConversationStore } from \"../../types/ai\";\n\nexport const createMemoryStore = (): AIConversationStore => {\n const conversations = new Map<string, AIConversation>();\n\n const get = async (id: string) => conversations.get(id);\n\n const getOrCreate = async (id: string) => {\n let conversation = conversations.get(id);\n\n if (!conversation) {\n conversation = { createdAt: Date.now(), id, messages: [] };\n conversations.set(id, conversation);\n }\n\n return conversation;\n };\n\n const set = async (id: string, conversation: AIConversation) => {\n conversations.set(id, conversation);\n };\n\n const list = async () =>\n Array.from(conversations.values())\n .map((conv) => ({\n createdAt: conv.createdAt,\n id: conv.id,\n lastMessageAt: conv.lastMessageAt,\n messageCount: conv.messages.length,\n title: conv.title ?? \"Untitled\",\n }))\n .sort(\n (first, second) =>\n (second.lastMessageAt ?? second.createdAt) -\n (first.lastMessageAt ?? first.createdAt),\n );\n\n const remove = async (id: string) => {\n conversations.delete(id);\n };\n\n return { get, getOrCreate, list, remove, set };\n};\n",
@@ -25,9 +27,10 @@
25
27
  "import type {\n AIClientMessage,\n AIConnectionOptions,\n AIServerMessage,\n} from \"../../../types/ai\";\nimport { isValidAIServerMessage } from \"../../../types/typeGuards\";\n\nconst WS_OPEN = 1;\nconst WS_NORMAL_CLOSURE = 1000;\nconst WS_CLOSED = 3;\nconst DEFAULT_PING_INTERVAL = 30_000;\nconst RECONNECT_INITIAL_DELAY = 500;\nconst RECONNECT_POLL_INTERVAL = 300;\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 60;\n\ntype AIConnectionState = {\n isConnected: boolean;\n pendingMessages: string[];\n pingInterval: ReturnType<typeof setInterval> | null;\n reconnectAttempts: number;\n reconnectTimeout: ReturnType<typeof setTimeout> | null;\n ws: WebSocket | null;\n};\n\ntype AIConnectionHandle = {\n close: () => void;\n getReadyState: () => number;\n send: (msg: AIClientMessage) => void;\n subscribe: (callback: (msg: AIServerMessage) => void) => () => void;\n};\n\n// eslint-disable-next-line no-empty-function\nconst noop = () => {};\nconst noopUnsubscribe = () => noop;\n\nconst NOOP_CONNECTION: AIConnectionHandle = {\n close: noop,\n send: noop,\n subscribe: noopUnsubscribe,\n getReadyState: () => WS_CLOSED,\n};\n\nconst buildWsUrl = (path: string) => {\n const { hostname, port, protocol } = window.location;\n const wsProtocol = protocol === \"https:\" ? \"wss:\" : \"ws:\";\n const portSuffix = port ? `:${port}` : \"\";\n\n return `${wsProtocol}//${hostname}${portSuffix}${path}`;\n};\n\nconst parseServerMessage = (event: MessageEvent) => {\n let data: unknown;\n\n try {\n data = JSON.parse(String(event.data));\n } catch {\n return null;\n }\n\n if (\n data &&\n typeof data === \"object\" &&\n \"type\" in data &&\n data.type === \"pong\"\n ) {\n return null;\n }\n\n if (!isValidAIServerMessage(data)) {\n return null;\n }\n\n return data;\n};\n\nexport const createAIConnection = (\n path: string,\n options: AIConnectionOptions = {},\n) => {\n if (typeof window === \"undefined\") {\n return NOOP_CONNECTION;\n }\n\n const shouldReconnect = options.reconnect !== false;\n const pingInterval = options.pingInterval ?? DEFAULT_PING_INTERVAL;\n const maxReconnectAttempts =\n options.maxReconnectAttempts ?? DEFAULT_MAX_RECONNECT_ATTEMPTS;\n\n const listeners = new Set<(msg: AIServerMessage) => void>();\n\n const connState: AIConnectionState = {\n isConnected: false,\n pendingMessages: [],\n pingInterval: null,\n reconnectAttempts: 0,\n reconnectTimeout: null,\n ws: null,\n };\n\n const flushPendingMessages = () => {\n if (connState.ws?.readyState !== WS_OPEN) {\n return;\n }\n\n while (connState.pendingMessages.length > 0) {\n const next = connState.pendingMessages.shift();\n if (typeof next === \"string\") {\n connState.ws.send(next);\n }\n }\n };\n\n const clearTimers = () => {\n if (connState.pingInterval) {\n clearInterval(connState.pingInterval);\n connState.pingInterval = null;\n }\n\n if (connState.reconnectTimeout) {\n clearTimeout(connState.reconnectTimeout);\n connState.reconnectTimeout = null;\n }\n };\n\n const scheduleReconnect = () => {\n connState.reconnectAttempts++;\n const delay =\n connState.reconnectAttempts === 1\n ? RECONNECT_INITIAL_DELAY\n : RECONNECT_POLL_INTERVAL;\n\n connState.reconnectTimeout = setTimeout(() => {\n if (connState.reconnectAttempts > maxReconnectAttempts) {\n return;\n }\n\n connect();\n }, delay);\n };\n\n const connect = () => {\n const url = buildWsUrl(path);\n const wsInstance = new WebSocket(url, options.protocols);\n\n wsInstance.onopen = () => {\n connState.isConnected = true;\n connState.reconnectAttempts = 0;\n flushPendingMessages();\n\n connState.pingInterval = setInterval(() => {\n if (wsInstance.readyState === WS_OPEN && connState.isConnected) {\n wsInstance.send(JSON.stringify({ type: \"ping\" }));\n }\n }, pingInterval);\n };\n\n wsInstance.onmessage = (event: MessageEvent) => {\n const message = parseServerMessage(event);\n\n if (!message) {\n return;\n }\n\n listeners.forEach((listener) => listener(message));\n };\n\n wsInstance.onclose = (event: CloseEvent) => {\n connState.isConnected = false;\n clearTimers();\n\n const shouldAttemptReconnect =\n shouldReconnect &&\n event.code !== WS_NORMAL_CLOSURE &&\n connState.reconnectAttempts < maxReconnectAttempts;\n\n if (shouldAttemptReconnect) {\n scheduleReconnect();\n }\n };\n\n wsInstance.onerror = () => {\n // Error is followed by close event, reconnection handled there\n };\n\n connState.ws = wsInstance;\n };\n\n const send = (msg: AIClientMessage) => {\n const serialized = JSON.stringify(msg);\n\n if (connState.ws?.readyState === WS_OPEN) {\n connState.ws.send(serialized);\n\n return;\n }\n\n connState.pendingMessages.push(serialized);\n };\n\n const subscribe = (callback: (msg: AIServerMessage) => void) => {\n listeners.add(callback);\n\n return () => {\n listeners.delete(callback);\n };\n };\n\n const close = () => {\n clearTimers();\n\n if (connState.ws) {\n connState.ws.close(WS_NORMAL_CLOSURE);\n connState.ws = null;\n }\n\n connState.isConnected = false;\n listeners.clear();\n };\n\n const getReadyState = () => connState.ws?.readyState ?? WS_CLOSED;\n\n connect();\n\n return { close, getReadyState, send, subscribe };\n};\n",
26
28
  "import type {\n AIConversation,\n RAGSource,\n AIImageData,\n AIMessage,\n AIStreamState,\n AIStoreAction,\n AIToolCall,\n} from \"../../../types/ai\";\n\nconst EMPTY_STATE: AIStreamState = {\n activeConversationId: null,\n conversations: new Map(),\n error: null,\n isStreaming: false,\n};\n\nconst initialActiveConversationId: string | null = null;\nconst initialError: string | null = null;\n\n// eslint-disable-next-line absolute/no-useless-function -- returns a new instance each call\nconst freshState = () => ({\n activeConversationId: initialActiveConversationId,\n conversations: new Map<string, AIConversation>(),\n error: initialError,\n isStreaming: false,\n});\n\nconst findAssistantMessage = (\n conversation: AIConversation,\n messageId: string,\n) =>\n conversation.messages.find(\n (msg) => msg.id === messageId && msg.role === \"assistant\",\n );\n\nconst getOrCreate = (state: AIStreamState, conversationId: string) => {\n let conversation = state.conversations.get(conversationId);\n\n if (!conversation) {\n conversation = {\n createdAt: Date.now(),\n id: conversationId,\n messages: [],\n };\n state.conversations.set(conversationId, conversation);\n }\n\n return conversation;\n};\n\nconst handleSend = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"send\" },\n) => {\n const conversation = getOrCreate(state, action.conversationId);\n const message: AIMessage = {\n attachments: action.attachments,\n content: action.content,\n conversationId: action.conversationId,\n id: action.messageId,\n role: \"user\",\n timestamp: Date.now(),\n };\n\n conversation.messages = [...conversation.messages, message];\n state.activeConversationId = action.conversationId;\n state.error = null;\n state.isStreaming = true;\n};\n\nconst handleChunk = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"chunk\" },\n) => {\n const conversation = getOrCreate(state, action.conversationId);\n const existingIdx = conversation.messages.findIndex(\n (msg) => msg.id === action.messageId && msg.role === \"assistant\",\n );\n\n if (existingIdx >= 0) {\n const prevContent = conversation.messages[existingIdx]?.content ?? \"\";\n conversation.messages = conversation.messages.map((msg, idx) =>\n idx === existingIdx\n ? { ...msg, content: prevContent + action.content }\n : msg,\n );\n\n return;\n }\n\n const message: AIMessage = {\n content: action.content,\n conversationId: action.conversationId,\n id: action.messageId,\n isStreaming: true,\n role: \"assistant\",\n timestamp: Date.now(),\n };\n\n conversation.messages = [...conversation.messages, message];\n};\n\nconst handleThinking = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"thinking\" },\n) => {\n const conversation = getOrCreate(state, action.conversationId);\n const existingIdx = conversation.messages.findIndex(\n (msg) => msg.id === action.messageId && msg.role === \"assistant\",\n );\n\n if (existingIdx >= 0) {\n const prevThinking = conversation.messages[existingIdx]?.thinking ?? \"\";\n conversation.messages = conversation.messages.map((msg, idx) =>\n idx === existingIdx\n ? { ...msg, thinking: prevThinking + action.content }\n : msg,\n );\n\n return;\n }\n\n const message: AIMessage = {\n content: \"\",\n conversationId: action.conversationId,\n id: action.messageId,\n isStreaming: true,\n role: \"assistant\",\n thinking: action.content,\n timestamp: Date.now(),\n };\n\n conversation.messages = [...conversation.messages, message];\n};\n\nconst upsertToolCall = (message: AIMessage, toolCall: AIToolCall) => {\n if (!message.toolCalls) {\n message.toolCalls = [toolCall];\n\n return;\n }\n\n const existingIdx = message.toolCalls.findIndex(\n (existing) => existing.name === toolCall.name,\n );\n\n if (existingIdx >= 0) {\n message.toolCalls[existingIdx] = toolCall;\n } else {\n message.toolCalls = [...message.toolCalls, toolCall];\n }\n};\n\nconst getOrCreateAssistantMessage = (\n conversation: AIConversation,\n messageId: string,\n conversationId: string,\n) => {\n const existing = findAssistantMessage(conversation, messageId);\n\n if (existing) {\n return existing;\n }\n\n const message: AIMessage = {\n content: \"\",\n conversationId,\n id: messageId,\n isStreaming: true,\n role: \"assistant\",\n timestamp: Date.now(),\n };\n conversation.messages = [...conversation.messages, message];\n\n return message;\n};\n\nconst handleRAGRetrieved = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"rag_retrieved\" },\n) => {\n const conversation = getOrCreate(state, action.conversationId);\n const message = getOrCreateAssistantMessage(\n conversation,\n action.messageId,\n action.conversationId,\n );\n\n message.sources = action.sources;\n message.retrievalStartedAt =\n action.retrievalStartedAt ?? message.retrievalStartedAt;\n message.retrievedAt = action.retrievedAt;\n message.retrievalDurationMs = action.retrievalDurationMs;\n message.retrievalTrace = action.trace;\n conversation.messages = [...conversation.messages];\n};\n\nconst handleRAGRetrieving = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"rag_retrieving\" },\n) => {\n const conversation = getOrCreate(state, action.conversationId);\n const message = getOrCreateAssistantMessage(\n conversation,\n action.messageId,\n action.conversationId,\n );\n\n message.retrievalStartedAt = action.retrievalStartedAt;\n conversation.messages = [...conversation.messages];\n};\n\nconst handleToolStatus = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"tool_status\" },\n) => {\n const conversation = getOrCreate(state, action.conversationId);\n const message = getOrCreateAssistantMessage(\n conversation,\n action.messageId,\n action.conversationId,\n );\n\n const toolCall: AIToolCall = {\n id: action.messageId,\n input: action.input,\n name: action.name,\n result: action.status === \"complete\" ? (action.result ?? \"\") : undefined,\n };\n\n upsertToolCall(message, toolCall);\n conversation.messages = [...conversation.messages];\n};\n\nconst markMessageComplete = (\n conversation: AIConversation,\n messageId: string,\n usage?: { inputTokens: number; outputTokens: number },\n durationMs?: number,\n model?: string,\n sources?: RAGSource[],\n) => {\n conversation.messages = conversation.messages.map((msg) =>\n msg.id === messageId && msg.role === \"assistant\"\n ? {\n ...msg,\n durationMs,\n isStreaming: false,\n model,\n sources: sources ?? msg.sources,\n usage,\n }\n : msg,\n );\n};\n\nconst NOT_FOUND = -1;\n\nconst findExistingImageById = (\n images: AIImageData[],\n imageId: string | undefined,\n) => {\n if (!imageId) return NOT_FOUND;\n\n return images.findIndex((img) => img.imageId === imageId);\n};\n\nconst findReplaceablePartialIndex = (images: AIImageData[]) => {\n const lastIdx = images.length - 1;\n\n if (lastIdx >= 0 && images[lastIdx]?.isPartial) {\n return lastIdx;\n }\n\n return NOT_FOUND;\n};\n\nconst upsertImage = (message: AIMessage, imageData: AIImageData) => {\n if (!message.images) {\n message.images = [imageData];\n\n return;\n }\n\n const existingIdx = findExistingImageById(message.images, imageData.imageId);\n\n if (existingIdx >= 0) {\n message.images[existingIdx] = imageData;\n\n return;\n }\n\n const replaceableIdx = findReplaceablePartialIndex(message.images);\n\n if (replaceableIdx >= 0) {\n message.images[replaceableIdx] = imageData;\n\n return;\n }\n\n message.images = [...message.images, imageData];\n};\n\nconst handleImage = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"image\" },\n) => {\n const conversation = getOrCreate(state, action.conversationId);\n const message = getOrCreateAssistantMessage(\n conversation,\n action.messageId,\n action.conversationId,\n );\n\n upsertImage(message, {\n data: action.data,\n format: action.format,\n imageId: action.imageId,\n isPartial: action.isPartial,\n revisedPrompt: action.revisedPrompt,\n });\n\n conversation.messages = [...conversation.messages];\n};\n\nconst handleComplete = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"complete\" },\n) => {\n const conversation = state.conversations.get(action.conversationId);\n\n if (conversation) {\n markMessageComplete(\n conversation,\n action.messageId,\n action.usage,\n action.durationMs,\n action.model,\n action.sources,\n );\n }\n\n state.isStreaming = false;\n};\n\nconst markConversationStreamsComplete = (conversation: AIConversation) => {\n const streamingMessages = conversation.messages.filter(\n (msg) => msg.isStreaming,\n );\n\n if (streamingMessages.length === 0) {\n return;\n }\n\n for (const msg of streamingMessages) {\n msg.isStreaming = false;\n }\n\n conversation.messages = [...conversation.messages];\n};\n\nconst markAllStreamsComplete = (state: AIStreamState) => {\n for (const [, conversation] of state.conversations) {\n markConversationStreamsComplete(conversation);\n }\n};\n\nconst handleBranch = (\n state: AIStreamState,\n action: AIStoreAction & { type: \"branch\" },\n) => {\n const source = state.conversations.get(action.oldConversationId);\n\n if (!source) {\n return;\n }\n\n const cutoffIndex = source.messages.findIndex(\n (msg) => msg.id === action.fromMessageId,\n );\n\n if (cutoffIndex < 0) {\n return;\n }\n\n const branchedMessages = source.messages\n .slice(0, cutoffIndex + 1)\n .map((msg) => ({ ...msg, conversationId: action.newConversationId }));\n\n const newConversation: AIConversation = {\n createdAt: Date.now(),\n id: action.newConversationId,\n messages: branchedMessages,\n };\n\n state.conversations.set(action.newConversationId, newConversation);\n state.activeConversationId = action.newConversationId;\n};\n\nconst applyAction = (state: AIStreamState, action: AIStoreAction) => {\n switch (action.type) {\n case \"send\":\n handleSend(state, action);\n break;\n case \"chunk\":\n handleChunk(state, action);\n break;\n case \"thinking\":\n handleThinking(state, action);\n break;\n case \"tool_status\":\n handleToolStatus(state, action);\n break;\n case \"image\":\n handleImage(state, action);\n break;\n case \"complete\":\n handleComplete(state, action);\n break;\n case \"error\":\n state.error = action.message;\n state.isStreaming = false;\n break;\n case \"rag_retrieving\":\n handleRAGRetrieving(state, action);\n break;\n case \"rag_retrieved\":\n handleRAGRetrieved(state, action);\n break;\n case \"cancel\":\n state.isStreaming = false;\n markAllStreamsComplete(state);\n break;\n case \"branch\":\n handleBranch(state, action);\n break;\n case \"set_conversation\":\n state.activeConversationId = action.conversationId;\n break;\n }\n};\n\nexport const createAIMessageStore = () => {\n let state = freshState();\n const subscribers = new Set<() => void>();\n\n return {\n dispatch: (action: AIStoreAction) => {\n applyAction(state, action);\n // New reference so useSyncExternalStore detects the change\n state = { ...state, conversations: new Map(state.conversations) };\n subscribers.forEach((callback) => callback());\n },\n getServerSnapshot: () => EMPTY_STATE,\n getSnapshot: () => state,\n subscribe: (callback: () => void) => {\n subscribers.add(callback);\n\n return () => {\n subscribers.delete(callback);\n };\n },\n };\n};\n",
27
29
  "import type {\n AIAttachment,\n AIMessage,\n AIServerMessage,\n} from \"../../../types/ai\";\nimport { serverMessageToAction } from \"./actions\";\nimport { createAIConnection } from \"./connection\";\nimport { createAIMessageStore } from \"./messageStore\";\nimport { generateId } from \"../protocol\";\n\nexport const createAIStream = (path: string, conversationId?: string) => {\n const connection = createAIConnection(path);\n const store = createAIMessageStore();\n const listeners = new Set<() => void>();\n\n let currentError: string | null = null;\n let currentIsStreaming = false;\n let currentMessages: AIMessage[] = [];\n let activeConversationId: string | null = conversationId ?? null;\n\n const syncState = () => {\n const snapshot = store.getSnapshot();\n const convId = activeConversationId ?? snapshot.activeConversationId;\n const conversation = convId\n ? snapshot.conversations.get(convId)\n : undefined;\n activeConversationId = convId ?? snapshot.activeConversationId;\n currentError = snapshot.error;\n currentIsStreaming = snapshot.isStreaming;\n currentMessages = conversation?.messages ?? [];\n listeners.forEach((listener) => listener());\n };\n\n const unsubscribeStore = store.subscribe(syncState);\n\n const unsubscribeConnection = connection.subscribe(\n (message: AIServerMessage) => {\n const action = serverMessageToAction(message);\n if (action) {\n store.dispatch(action);\n }\n },\n );\n\n const branch = (messageId: string, content: string) => {\n if (activeConversationId) {\n connection.send({\n content,\n conversationId: activeConversationId,\n messageId,\n type: \"branch\",\n });\n }\n };\n\n const cancel = () => {\n if (activeConversationId) {\n store.dispatch({ type: \"cancel\" });\n connection.send({\n conversationId: activeConversationId,\n type: \"cancel\",\n });\n }\n };\n\n const destroy = () => {\n unsubscribeStore();\n unsubscribeConnection();\n connection.close();\n listeners.clear();\n };\n\n const send = (content: string, attachments?: AIAttachment[]) => {\n const convId = activeConversationId ?? generateId();\n const msgId = generateId();\n\n store.dispatch({\n attachments,\n content,\n conversationId: convId,\n messageId: msgId,\n type: \"send\",\n });\n\n connection.send({\n attachments,\n content,\n conversationId: convId,\n type: \"message\",\n });\n };\n\n const subscribe = (callback: () => void) => {\n listeners.add(callback);\n\n return () => {\n listeners.delete(callback);\n };\n };\n\n return {\n branch,\n cancel,\n destroy,\n send,\n subscribe,\n get error() {\n return currentError;\n },\n get isStreaming() {\n return currentIsStreaming;\n },\n get messages() {\n return currentMessages;\n },\n };\n};\n\nexport type CreateAIStream = typeof createAIStream;\n",
28
- "type FetchLike = (\n input: RequestInfo | URL,\n init?: RequestInit | BunFetchRequestInit,\n) => Promise<Response>;\n\nexport type OAuth2ClientCredentialsConfig = {\n /** Token endpoint that issues client-credentials grants. */\n tokenUrl: string;\n clientId: string;\n clientSecret: string;\n /** Space-joined scopes (or array). */\n scope?: string | string[];\n /** Optional audience parameter (Auth0, etc.). */\n audience?: string;\n /** Where to send credentials: request body (default) or HTTP Basic header. */\n authStyle?: \"body\" | \"basic\";\n /** Extra params merged into the token request body. */\n extraParams?: Record<string, string>;\n /** Refresh this many ms before the token actually expires. Defaults to 60s. */\n expirySkewMs?: number;\n /** Fallback lifetime when the response omits expires_in. Defaults to 3600s. */\n fallbackTtlSeconds?: number;\n fetch?: FetchLike;\n now?: () => number;\n};\n\ntype TokenResponse = {\n access_token: string;\n token_type?: string;\n expires_in?: number;\n scope?: string;\n};\n\ntype CachedToken = {\n accessToken: string;\n expiresAtMs: number;\n};\n\nconst readOAuth2ErrorDetail = async (response: Response): Promise<string> => {\n const text = await response\n .clone()\n .text()\n .catch(() => \"\");\n return text.trim();\n};\n\n/**\n * Builds a `tokenSource` for `openai()` / `openaiCompatible()` that performs the\n * OAuth2 client-credentials flow against custom LLM gateways (Azure AD, Auth0,\n * enterprise proxies). Caches the access token in memory and refreshes it\n * automatically before expiry. Returns `() => Promise<string>`.\n */\nexport const createOAuth2ClientCredentialsTokenSource = (\n config: OAuth2ClientCredentialsConfig,\n): (() => Promise<string>) => {\n const fetchImpl = config.fetch ?? fetch;\n const now = config.now ?? (() => Date.now());\n const skewMs = config.expirySkewMs ?? 60_000;\n const fallbackTtl = config.fallbackTtlSeconds ?? 3_600;\n const scope = Array.isArray(config.scope)\n ? config.scope.join(\" \")\n : config.scope;\n\n let cached: CachedToken | null = null;\n let inflight: Promise<string> | null = null;\n\n const requestToken = async (): Promise<string> => {\n const body = new URLSearchParams({ grant_type: \"client_credentials\" });\n if (scope) body.set(\"scope\", scope);\n if (config.audience) body.set(\"audience\", config.audience);\n for (const [key, value] of Object.entries(config.extraParams ?? {})) {\n body.set(key, value);\n }\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n if (config.authStyle === \"basic\") {\n const encoded = btoa(`${config.clientId}:${config.clientSecret}`);\n headers.Authorization = `Basic ${encoded}`;\n } else {\n body.set(\"client_id\", config.clientId);\n body.set(\"client_secret\", config.clientSecret);\n }\n\n const response = await fetchImpl(config.tokenUrl, {\n body,\n headers,\n method: \"POST\",\n });\n if (!response.ok) {\n const detail = await readOAuth2ErrorDetail(response);\n throw new Error(\n `OAuth2 client-credentials request failed: HTTP ${response.status}${detail ? `: ${detail}` : \"\"}`,\n );\n }\n const payload = (await response.json()) as TokenResponse;\n if (!payload.access_token) {\n throw new Error(\n \"OAuth2 client-credentials response did not include access_token\",\n );\n }\n const ttlSeconds = payload.expires_in ?? fallbackTtl;\n cached = {\n accessToken: payload.access_token,\n expiresAtMs: now() + ttlSeconds * 1_000,\n };\n return payload.access_token;\n };\n\n return async (): Promise<string> => {\n if (cached && cached.expiresAtMs - skewMs > now()) {\n return cached.accessToken;\n }\n if (inflight) return inflight;\n inflight = requestToken().finally(() => {\n inflight = null;\n });\n return inflight;\n };\n};\n"
30
+ "type FetchLike = (\n input: RequestInfo | URL,\n init?: RequestInit | BunFetchRequestInit,\n) => Promise<Response>;\n\nexport type OAuth2ClientCredentialsConfig = {\n /** Token endpoint that issues client-credentials grants. */\n tokenUrl: string;\n clientId: string;\n clientSecret: string;\n /** Space-joined scopes (or array). */\n scope?: string | string[];\n /** Optional audience parameter (Auth0, etc.). */\n audience?: string;\n /** Where to send credentials: request body (default) or HTTP Basic header. */\n authStyle?: \"body\" | \"basic\";\n /** Extra params merged into the token request body. */\n extraParams?: Record<string, string>;\n /** Refresh this many ms before the token actually expires. Defaults to 60s. */\n expirySkewMs?: number;\n /** Fallback lifetime when the response omits expires_in. Defaults to 3600s. */\n fallbackTtlSeconds?: number;\n fetch?: FetchLike;\n now?: () => number;\n};\n\ntype TokenResponse = {\n access_token: string;\n token_type?: string;\n expires_in?: number;\n scope?: string;\n};\n\ntype CachedToken = {\n accessToken: string;\n expiresAtMs: number;\n};\n\nconst readOAuth2ErrorDetail = async (response: Response): Promise<string> => {\n const text = await response\n .clone()\n .text()\n .catch(() => \"\");\n return text.trim();\n};\n\n/**\n * Builds a `tokenSource` for `openai()` / `openaiCompatible()` that performs the\n * OAuth2 client-credentials flow against custom LLM gateways (Azure AD, Auth0,\n * enterprise proxies). Caches the access token in memory and refreshes it\n * automatically before expiry. Returns `() => Promise<string>`.\n */\nexport const createOAuth2ClientCredentialsTokenSource = (\n config: OAuth2ClientCredentialsConfig,\n): (() => Promise<string>) => {\n const fetchImpl = config.fetch ?? fetch;\n const now = config.now ?? (() => Date.now());\n const skewMs = config.expirySkewMs ?? 60_000;\n const fallbackTtl = config.fallbackTtlSeconds ?? 3_600;\n const scope = Array.isArray(config.scope)\n ? config.scope.join(\" \")\n : config.scope;\n\n let cached: CachedToken | null = null;\n let inflight: Promise<string> | null = null;\n\n const requestToken = async (): Promise<string> => {\n const body = new URLSearchParams({ grant_type: \"client_credentials\" });\n if (scope) body.set(\"scope\", scope);\n if (config.audience) body.set(\"audience\", config.audience);\n for (const [key, value] of Object.entries(config.extraParams ?? {})) {\n body.set(key, value);\n }\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n if (config.authStyle === \"basic\") {\n const encoded = btoa(`${config.clientId}:${config.clientSecret}`);\n headers.Authorization = `Basic ${encoded}`;\n } else {\n body.set(\"client_id\", config.clientId);\n body.set(\"client_secret\", config.clientSecret);\n }\n\n const response = await fetchImpl(config.tokenUrl, {\n body,\n headers,\n method: \"POST\",\n });\n if (!response.ok) {\n const detail = await readOAuth2ErrorDetail(response);\n throw new Error(\n `OAuth2 client-credentials request failed: HTTP ${response.status}${detail ? `: ${detail}` : \"\"}`,\n );\n }\n const payload = (await response.json()) as TokenResponse;\n if (!payload.access_token) {\n throw new Error(\n \"OAuth2 client-credentials response did not include access_token\",\n );\n }\n const ttlSeconds = payload.expires_in ?? fallbackTtl;\n cached = {\n accessToken: payload.access_token,\n expiresAtMs: now() + ttlSeconds * 1_000,\n };\n return payload.access_token;\n };\n\n return async (): Promise<string> => {\n if (cached && cached.expiresAtMs - skewMs > now()) {\n return cached.accessToken;\n }\n if (inflight) return inflight;\n inflight = requestToken().finally(() => {\n inflight = null;\n });\n return inflight;\n };\n};\n",
31
+ "import {\n PROVIDER_STATUS_PAGES,\n providerStatusPage,\n} from \"./errors/providerError\";\nimport { setProviderAvailability } from \"./resilience\";\n\n// Proactive provider availability via Atlassian Statuspage JSON (free, public,\n// CDN-cached, no auth). Meant to run SERVER-SIDE (one poll loop per instance) as\n// the single source of truth — it primes the circuit breaker so a provider that\n// the status page reports down fails fast WITHOUT first burning real user\n// requests. Clients should read the server's view, not poll the status page.\n\n// The specific status-page component that represents the API surface we call,\n// per provider. Checking the component (not the overall page indicator) avoids\n// false alarms — e.g. OpenAI's overall page can read \"degraded\" because of an\n// unrelated surface while Chat Completions is fully operational.\nconst API_COMPONENT_BY_PROVIDER: Record<string, string> = {\n anthropic: \"Claude API (api.anthropic.com)\",\n openai: \"Chat Completions\",\n};\n\n// Statuspage component.status values that still mean \"usable\". Degraded = slower\n// but working, so we don't disable on it; only genuine outages flip availability.\nconst AVAILABLE_COMPONENT_STATUSES = new Set([\n \"operational\",\n \"degraded_performance\",\n]);\n\n// Overall page indicators (\"none\" | \"minor\" | \"major\" | \"critical\"), used only\n// as a fallback when the named component can't be found.\nconst AVAILABLE_PAGE_INDICATORS = new Set([\"none\", \"minor\"]);\n\nexport type ProviderApiStatus = {\n provider: string;\n /** Whether the API surface is usable (operational or merely degraded). */\n available: boolean;\n /** The raw component status or page indicator we read. */\n indicator: string;\n /** The status-page component matched, or null when we fell back to the page. */\n componentName: string | null;\n reason: string;\n statusPageUrl: string | null;\n checkedAt: number;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst readString = (record: Record<string, unknown>, key: string): string =>\n typeof record[key] === \"string\" ? record[key] : \"\";\n\nconst findComponentStatus = (\n body: unknown,\n componentName: string,\n): string | null => {\n if (!isRecord(body) || !Array.isArray(body.components)) return null;\n const match = body.components\n .filter(isRecord)\n .find((component) => readString(component, \"name\") === componentName);\n\n return match ? readString(match, \"status\") : null;\n};\n\nconst readPageIndicator = (body: unknown): string | null => {\n if (!isRecord(body) || !isRecord(body.status)) return null;\n const indicator = readString(body.status, \"indicator\");\n\n return indicator === \"\" ? null : indicator;\n};\n\nconst fetchJson = async (\n url: string,\n signal?: AbortSignal,\n): Promise<unknown> => {\n const response = await fetch(url, { signal });\n if (!response.ok) throw new Error(`status fetch ${response.status}`);\n\n return response.json();\n};\n\nconst unknownStatus = (provider: string): ProviderApiStatus => ({\n available: true,\n checkedAt: Date.now(),\n componentName: null,\n indicator: \"unknown\",\n provider,\n reason: \"\",\n statusPageUrl: providerStatusPage(provider),\n});\n\n/**\n * Fetch the current API availability for a provider from its public status\n * page. Best-effort: any failure (no status page, network/CORS, parse error)\n * resolves to \"available: true, unknown\" so a flaky status page never blocks a\n * provider that might actually be fine.\n */\nexport const fetchProviderApiStatus = async (\n provider: string,\n signal?: AbortSignal,\n): Promise<ProviderApiStatus> => {\n const base = PROVIDER_STATUS_PAGES[provider];\n if (base === undefined) return unknownStatus(provider);\n\n try {\n const componentName = API_COMPONENT_BY_PROVIDER[provider] ?? null;\n if (componentName !== null) {\n const components = await fetchJson(\n `${base}/api/v2/components.json`,\n signal,\n );\n const status = findComponentStatus(components, componentName);\n if (status !== null) {\n const available = AVAILABLE_COMPONENT_STATUSES.has(status);\n\n return {\n available,\n checkedAt: Date.now(),\n componentName,\n indicator: status,\n provider,\n reason: available ? \"\" : `${status} on ${componentName}`,\n statusPageUrl: base,\n };\n }\n }\n\n // Fallback: overall page indicator.\n const summary = await fetchJson(`${base}/api/v2/status.json`, signal);\n const indicator = readPageIndicator(summary);\n if (indicator === null) return unknownStatus(provider);\n const available = AVAILABLE_PAGE_INDICATORS.has(indicator);\n\n return {\n available,\n checkedAt: Date.now(),\n componentName: null,\n indicator,\n provider,\n reason: available ? \"\" : `page status: ${indicator}`,\n statusPageUrl: base,\n };\n } catch {\n return unknownStatus(provider);\n }\n};\n\nexport type ProviderStatusMonitorOptions = {\n /** Providers to watch. Default: anthropic + openai. */\n providers?: string[];\n /** Poll interval. Default 60s (status pages are CDN-cached ~30s). */\n intervalMs?: number;\n /** Called with each provider's status after every poll. */\n onUpdate?: (status: ProviderApiStatus) => void;\n};\n\n/**\n * Start a server-side poll loop that feeds provider availability into the\n * circuit breaker (via setProviderAvailability). Returns a stop function.\n * Run ONE per process; clients should read the resulting getProviderHealth()\n * via your own endpoint rather than polling status pages themselves.\n */\nexport const startProviderStatusMonitor = (\n options?: ProviderStatusMonitorOptions,\n) => {\n const providers = options?.providers ?? [\"anthropic\", \"openai\"];\n const intervalMs = options?.intervalMs ?? 60_000;\n\n const tick = async () => {\n const results = await Promise.all(\n providers.map((provider) => fetchProviderApiStatus(provider)),\n );\n for (const status of results) {\n setProviderAvailability(status.provider, {\n available: status.available,\n indicator: status.indicator,\n reason: status.reason,\n });\n options?.onUpdate?.(status);\n }\n };\n\n void tick();\n const timer = setInterval(() => void tick(), intervalMs);\n\n return () => clearInterval(timer);\n};\n"
29
32
  ],
30
- "mappings": "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",
31
- "debugId": "8280CFC77A5D2DF464756E2164756E21",
33
+ "mappings": "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",
34
+ "debugId": "E077A15D83F1F94464756E2164756E21",
32
35
  "names": []
33
36
  }