llm-sdk-js 0.2.0

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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -0
  3. package/dist/adapters/anthropic.d.ts +13 -0
  4. package/dist/adapters/anthropic.d.ts.map +1 -0
  5. package/dist/adapters/groq.d.ts +10 -0
  6. package/dist/adapters/groq.d.ts.map +1 -0
  7. package/dist/adapters/index.d.ts +6 -0
  8. package/dist/adapters/index.d.ts.map +1 -0
  9. package/dist/adapters/ollama.d.ts +11 -0
  10. package/dist/adapters/ollama.d.ts.map +1 -0
  11. package/dist/adapters/openai-compatible.d.ts +16 -0
  12. package/dist/adapters/openai-compatible.d.ts.map +1 -0
  13. package/dist/adapters/openai.d.ts +10 -0
  14. package/dist/adapters/openai.d.ts.map +1 -0
  15. package/dist/adapters/sse.d.ts +7 -0
  16. package/dist/adapters/sse.d.ts.map +1 -0
  17. package/dist/adapters/zod-schema.d.ts +5 -0
  18. package/dist/adapters/zod-schema.d.ts.map +1 -0
  19. package/dist/cache/index.d.ts +6 -0
  20. package/dist/cache/index.d.ts.map +1 -0
  21. package/dist/cache/key.d.ts +8 -0
  22. package/dist/cache/key.d.ts.map +1 -0
  23. package/dist/cache/memory.d.ts +10 -0
  24. package/dist/cache/memory.d.ts.map +1 -0
  25. package/dist/cache/types.d.ts +15 -0
  26. package/dist/cache/types.d.ts.map +1 -0
  27. package/dist/errors.d.ts +33 -0
  28. package/dist/errors.d.ts.map +1 -0
  29. package/dist/extract.d.ts +5 -0
  30. package/dist/extract.d.ts.map +1 -0
  31. package/dist/index.cjs +1391 -0
  32. package/dist/index.cjs.map +1 -0
  33. package/dist/index.d.ts +6 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +1381 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/policy/cache.d.ts +4 -0
  38. package/dist/policy/cache.d.ts.map +1 -0
  39. package/dist/policy/fallback.d.ts +7 -0
  40. package/dist/policy/fallback.d.ts.map +1 -0
  41. package/dist/policy/retry.d.ts +4 -0
  42. package/dist/policy/retry.d.ts.map +1 -0
  43. package/dist/policy/timeout.d.ts +13 -0
  44. package/dist/policy/timeout.d.ts.map +1 -0
  45. package/dist/pricing/index.d.ts +16 -0
  46. package/dist/pricing/index.d.ts.map +1 -0
  47. package/dist/router/create-router.d.ts +4 -0
  48. package/dist/router/create-router.d.ts.map +1 -0
  49. package/dist/router/messages.d.ts +4 -0
  50. package/dist/router/messages.d.ts.map +1 -0
  51. package/dist/router/model-ref.d.ts +5 -0
  52. package/dist/router/model-ref.d.ts.map +1 -0
  53. package/dist/router/options.d.ts +7 -0
  54. package/dist/router/options.d.ts.map +1 -0
  55. package/dist/router/request.d.ts +4 -0
  56. package/dist/router/request.d.ts.map +1 -0
  57. package/dist/router/router-impl.d.ts +16 -0
  58. package/dist/router/router-impl.d.ts.map +1 -0
  59. package/dist/router/state.d.ts +11 -0
  60. package/dist/router/state.d.ts.map +1 -0
  61. package/dist/router/types.d.ts +30 -0
  62. package/dist/router/types.d.ts.map +1 -0
  63. package/dist/router.d.ts +5 -0
  64. package/dist/router.d.ts.map +1 -0
  65. package/dist/types.d.ts +184 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/package.json +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/router/options.ts","../src/cache/memory.ts","../src/adapters/zod-schema.ts","../src/cache/key.ts","../src/cache/index.ts","../src/extract.ts","../src/policy/cache.ts","../src/policy/fallback.ts","../src/policy/retry.ts","../src/policy/timeout.ts","../src/pricing/prices.json","../src/pricing/index.ts","../src/router/messages.ts","../src/router/model-ref.ts","../src/router/request.ts","../src/router/router-impl.ts","../src/adapters/sse.ts","../src/adapters/openai-compatible.ts","../src/adapters/anthropic.ts","../src/adapters/groq.ts","../src/adapters/ollama.ts","../src/adapters/openai.ts","../src/adapters/index.ts","../src/router/state.ts","../src/router/create-router.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { AttemptRecord } from \"./types.js\";\n\n/** Caller mistake — not retried or failed over. */\nexport class BadRequest extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);\n this.name = \"BadRequest\";\n }\n}\n\n/** All providers / attempts exhausted. */\nexport class AllProvidersFailed extends Error {\n readonly attempts: AttemptRecord[];\n\n constructor(attempts: AttemptRecord[], message = \"All providers failed\") {\n super(message);\n this.name = \"AllProvidersFailed\";\n this.attempts = attempts;\n }\n}\n\nexport type ErrorKind =\n | \"rate_limit\"\n | \"timeout\"\n | \"overloaded\"\n | \"server_error\"\n | \"network\"\n | \"auth\"\n | \"bad_request\"\n | \"content_filter\"\n | \"unknown\";\n\n/** Provider failure; may trigger failover when retryable. */\nexport class ProviderError extends Error {\n readonly kind: ErrorKind;\n readonly provider: string;\n readonly retryable: boolean;\n readonly status?: number;\n readonly retryAfterMs?: number;\n\n constructor(\n message: string,\n options: {\n kind: ErrorKind;\n provider: string;\n retryable?: boolean;\n status?: number;\n retryAfterMs?: number;\n cause?: unknown;\n },\n ) {\n super(message, options.cause !== undefined ? { cause: options.cause } : undefined);\n this.name = \"ProviderError\";\n this.kind = options.kind;\n this.provider = options.provider;\n this.retryable =\n options.retryable ??\n (options.kind === \"rate_limit\" ||\n options.kind === \"timeout\" ||\n options.kind === \"overloaded\" ||\n options.kind === \"server_error\" ||\n options.kind === \"network\");\n if (options.status !== undefined) this.status = options.status;\n if (options.retryAfterMs !== undefined) this.retryAfterMs = options.retryAfterMs;\n }\n}\n\n/** Map HTTP status → `ErrorKind`. */\nexport function classify(status: number): ErrorKind {\n if (status === 429) return \"rate_limit\";\n if (status === 408 || status === 504) return \"timeout\";\n if (status === 401 || status === 403) return \"auth\";\n if (status === 529) return \"overloaded\";\n if (status === 400 || status === 404 || status === 422) return \"bad_request\";\n if (status >= 500) return \"server_error\";\n return \"unknown\";\n}\n\nexport function providerErrorFromHttp(\n provider: string,\n status: number,\n body: string,\n retryAfterHeader?: string | null,\n): ProviderError {\n const kind = classify(status);\n const retryAfterMs = parseRetryAfterHeader(retryAfterHeader);\n return new ProviderError(`Request failed (${status}): ${body}`, {\n kind,\n provider,\n status,\n retryable:\n kind === \"rate_limit\" || kind === \"timeout\" || kind === \"server_error\" || kind === \"overloaded\",\n ...(retryAfterMs !== undefined ? { retryAfterMs } : {}),\n });\n}\n\nfunction parseRetryAfterHeader(header?: string | null): number | undefined {\n if (!header) return undefined;\n const asInt = Number(header);\n if (!Number.isNaN(asInt)) return asInt * 1000;\n const date = Date.parse(header);\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now());\n return undefined;\n}\n","import { BadRequest } from \"../errors.js\";\nimport type { CallOptions, RouteConfig, RouterConfig } from \"../types.js\";\n\n/** Reject configs that set both `model` and `primary`. */\nexport function assertNoConflictingModelFields(o: CallOptions, where: string): void {\n if (o.model !== undefined && o.primary !== undefined) {\n throw new BadRequest(\n `Both \"model\" and \"primary\" are set in the same ${where} — \"model\" always takes ` +\n `precedence, so \"primary\" would be silently ignored. Set only one.`,\n );\n }\n}\n\n/** Merge order: call > route > global. */\nexport function mergeOptions(\n global: RouterConfig,\n route?: RouteConfig,\n call?: CallOptions,\n): CallOptions {\n const out: CallOptions = {\n ...pickShared(global),\n ...pickShared(route ?? {}),\n ...pickShared(call ?? {}),\n };\n\n const retry = { ...global.retry, ...route?.retry, ...call?.retry };\n if (Object.keys(retry).length > 0) out.retry = retry;\n\n if (call?.cache !== undefined) out.cache = call.cache;\n else if (route?.cache !== undefined) out.cache = route.cache;\n else if (global.cache !== undefined) out.cache = global.cache;\n\n const fallbacks = call?.fallbacks ?? route?.fallbacks ?? global.fallbacks;\n if (fallbacks !== undefined) out.fallbacks = fallbacks;\n\n const raw = { ...global.raw, ...route?.raw, ...call?.raw };\n if (Object.keys(raw).length > 0) out.raw = raw;\n\n return out;\n}\n\nfunction pickShared(o: CallOptions): CallOptions {\n const out: CallOptions = {};\n if (o.model !== undefined) out.model = o.model;\n if (o.primary !== undefined) out.primary = o.primary;\n if (o.fallbacks !== undefined) out.fallbacks = o.fallbacks;\n if (o.retry !== undefined) out.retry = o.retry;\n if (o.timeout !== undefined) out.timeout = o.timeout;\n if (o.cache !== undefined) out.cache = o.cache;\n if (o.temperature !== undefined) out.temperature = o.temperature;\n if (o.maxTokens !== undefined) out.maxTokens = o.maxTokens;\n if (o.system !== undefined) out.system = o.system;\n if (o.messages !== undefined) out.messages = o.messages;\n if (o.raw !== undefined) out.raw = o.raw;\n if (o.tools !== undefined) out.tools = o.tools;\n if (o.allowContentFilterFailover !== undefined) {\n out.allowContentFilterFailover = o.allowContentFilterFailover;\n }\n return out;\n}\n\nexport function resolveModelChain(options: CallOptions): string[] {\n if (options.model) return [options.model, ...(options.fallbacks ?? [])];\n if (!options.primary) return options.fallbacks ?? [];\n return [options.primary, ...(options.fallbacks ?? [])];\n}\n","import type { Cache, CacheEntry } from \"./types.js\";\n\nconst DEFAULT_MAX_ENTRIES = 1000;\n\ninterface StoredEntry {\n value: CacheEntry;\n expiresAt: number;\n}\n\n/** In-process cache with TTL and LRU eviction (default cap 1000). */\nexport class MemoryCache implements Cache {\n private readonly store = new Map<string, StoredEntry>();\n\n constructor(private readonly maxEntries: number = DEFAULT_MAX_ENTRIES) {}\n\n get(key: string): CacheEntry | undefined {\n const entry = this.store.get(key);\n if (!entry) return undefined;\n if (Date.now() > entry.expiresAt) {\n this.store.delete(key);\n return undefined;\n }\n this.store.delete(key);\n this.store.set(key, entry); // move to most-recently-used\n return entry.value;\n }\n\n set(key: string, value: CacheEntry, ttlMs: number): void {\n this.store.delete(key);\n this.store.set(key, { value, expiresAt: Date.now() + ttlMs });\n if (this.store.size > this.maxEntries) {\n const oldest = this.store.keys().next().value;\n if (oldest !== undefined) this.store.delete(oldest);\n }\n }\n}\n","/** Best-effort Zod → JSON Schema (no zod dependency). Unrecognized types → `{}`. */\n\ninterface ZodLike {\n _def?: Record<string, unknown>;\n def?: Record<string, unknown>;\n shape?: Record<string, unknown>;\n description?: string;\n}\n\ninterface ZodInfo {\n kind: string;\n def: Record<string, unknown>;\n legacy: boolean;\n}\n\nfunction zodInfo(schema: unknown): ZodInfo | undefined {\n const s = schema as ZodLike;\n if (s?._def && typeof s._def.typeName === \"string\") {\n return { kind: s._def.typeName.replace(/^Zod/, \"\").toLowerCase(), def: s._def, legacy: true };\n }\n if (s?.def && typeof s.def.type === \"string\") {\n return { kind: s.def.type.toLowerCase(), def: s.def, legacy: false };\n }\n return undefined;\n}\n\nexport function isZodLike(schema: unknown): boolean {\n return zodInfo(schema) !== undefined;\n}\n\nfunction withDescription(schema: Record<string, unknown>, description?: string): Record<string, unknown> {\n return description ? { ...schema, description } : schema;\n}\n\nfunction isOptionalField(field: unknown): boolean {\n const info = zodInfo(field);\n return info?.kind === \"optional\" || info?.kind === \"default\";\n}\n\nfunction zodToJsonSchema(schema: unknown): Record<string, unknown> {\n const s = schema as ZodLike;\n const info = zodInfo(schema);\n if (!info) return withDescription({}, s?.description);\n const { kind, def, legacy } = info;\n\n switch (kind) {\n case \"string\":\n return withDescription({ type: \"string\" }, s.description);\n case \"number\":\n return withDescription({ type: \"number\" }, s.description);\n case \"boolean\":\n return withDescription({ type: \"boolean\" }, s.description);\n case \"bigint\":\n case \"int\":\n return withDescription({ type: \"integer\" }, s.description);\n case \"date\":\n return withDescription({ type: \"string\", format: \"date-time\" }, s.description);\n case \"literal\": {\n const value = legacy ? def.value : (def.values as unknown[] | undefined)?.[0];\n return withDescription({ const: value }, s.description);\n }\n case \"enum\": {\n const raw = legacy ? def.values : (def.entries ?? def.options);\n const list = Array.isArray(raw) ? raw : Object.values((raw as Record<string, unknown>) ?? {});\n return withDescription({ enum: list }, s.description);\n }\n case \"array\": {\n const item = legacy ? def.type : def.element;\n return withDescription({ type: \"array\", items: zodToJsonSchema(item) }, s.description);\n }\n case \"object\": {\n const shape = s.shape ?? {};\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n for (const [key, field] of Object.entries(shape)) {\n properties[key] = zodToJsonSchema(field);\n if (!isOptionalField(field)) required.push(key);\n }\n return withDescription(\n { type: \"object\", properties, ...(required.length > 0 ? { required } : {}) },\n s.description,\n );\n }\n case \"optional\":\n case \"nullable\":\n case \"default\":\n case \"catch\":\n return zodToJsonSchema(def.innerType);\n default:\n return withDescription({}, s.description);\n }\n}\n\n/** Zod → JSON Schema; non-Zod values pass through as JSON Schema. */\nexport function toJsonSchema(schema: unknown): unknown {\n if (schema === undefined) return { type: \"object\", properties: {} };\n return isZodLike(schema) ? zodToJsonSchema(schema) : schema;\n}\n","import { createHash } from \"node:crypto\";\nimport type { Message, ToolDefinition } from \"../types.js\";\nimport { toJsonSchema } from \"../adapters/zod-schema.js\";\n\n/** Deep-clones a value with object keys sorted, so key order doesn't affect the JSON output. */\nfunction normalize(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(normalize);\n if (value !== null && typeof value === \"object\") {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n sorted[key] = normalize((value as Record<string, unknown>)[key]);\n }\n return sorted;\n }\n return value;\n}\n\nexport function cacheKey(\n modelChain: string[],\n messages: Message[],\n opts: {\n temperature?: number;\n maxTokens?: number;\n tools?: ToolDefinition[];\n raw?: Partial<Record<string, Record<string, unknown>>>;\n } = {},\n): string {\n const payload = JSON.stringify(\n normalize({\n models: modelChain,\n messages,\n temperature: opts.temperature ?? null,\n maxTokens: opts.maxTokens ?? null,\n tools: opts.tools\n ? opts.tools.map((t) => ({\n name: t.name,\n description: t.description ?? null,\n schema: toJsonSchema(t.schema),\n }))\n : null,\n raw: opts.raw ?? null,\n }),\n );\n return createHash(\"sha256\").update(payload).digest(\"hex\");\n}\n","export type { Cache, CacheEntry } from \"./types.js\";\nexport { MemoryCache } from \"./memory.js\";\nexport { cacheKey } from \"./key.js\";\n\n/** Parse `1h` / `30m` / `24h` / ms number → milliseconds. */\nexport function parseTtl(ttl: string | number): number {\n if (typeof ttl === \"number\") return ttl;\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m|h|d)$/i.exec(ttl.trim());\n if (!match) {\n throw new Error(`Invalid TTL \"${ttl}\". Use e.g. \"30m\", \"1h\", or milliseconds.`);\n }\n const n = Number(match[1]);\n const unit = match[2]!.toLowerCase();\n switch (unit) {\n case \"ms\":\n return n;\n case \"s\":\n return n * 1000;\n case \"m\":\n return n * 60_000;\n case \"h\":\n return n * 3_600_000;\n case \"d\":\n return n * 86_400_000;\n default:\n return n;\n }\n}\n","import { BadRequest } from \"./errors.js\";\nimport type {\n CallOptions,\n CompleteInput,\n CompleteResult,\n ExtractInput,\n ExtractResult,\n InferSchemaOutput,\n} from \"./types.js\";\n\ntype Completer = (input: CompleteInput, options?: CallOptions) => Promise<CompleteResult>;\n\nfunction zodFieldKind(field: unknown): string | undefined {\n const f = field as { _def?: { typeName?: string }; def?: { type?: string } };\n const name = f._def?.typeName ?? f.def?.type;\n return name ? String(name).replace(/^Zod/, \"\").toLowerCase() : undefined;\n}\n\n/** Describe a Zod object `.shape` for the extract prompt. */\nfunction describeSchema(schema: unknown): string | undefined {\n const s = schema as { shape?: Record<string, unknown> };\n if (!s || typeof s !== \"object\" || !s.shape || typeof s.shape !== \"object\") return undefined;\n\n const fields = Object.entries(s.shape).map(([key, field]) => {\n const kind = zodFieldKind(field);\n return kind ? `${key}: ${kind}` : key;\n });\n return fields.length > 0 ? `{ ${fields.join(\", \")} }` : undefined;\n}\n\nexport async function extractWithSchema<S, T = InferSchemaOutput<S>>(\n complete: Completer,\n input: ExtractInput<S>,\n call: CallOptions = {},\n): Promise<ExtractResult<T>> {\n const schema = input.schema as {\n parse?: (v: unknown) => T;\n safeParse?: (v: unknown) => { success: boolean; data?: T; error?: unknown };\n };\n\n if (!schema || (typeof schema.parse !== \"function\" && typeof schema.safeParse !== \"function\")) {\n throw new BadRequest(\"extract() requires a Zod schema (or compatible parse/safeParse)\");\n }\n\n const shape = input.schemaDescription ?? describeSchema(input.schema);\n const instruction = shape\n ? `Respond with JSON only matching this shape: ${shape}. No markdown.`\n : \"Respond with JSON only that matches the requested schema. No markdown.\";\n const basePrompt = [input.prompt, \"\", instruction].join(\"\\n\");\n\n const maxSchemaRetries = 2;\n let lastErr: unknown;\n\n for (let i = 0; i < maxSchemaRetries; i++) {\n const prompt =\n i === 0\n ? basePrompt\n : `${basePrompt}\\n\\nPrevious JSON was invalid:\\n${String(lastErr)}\\n\\nFix it.`;\n\n const completeInput: CompleteInput = {\n prompt,\n ...(input.system !== undefined ? { system: input.system } : {}),\n };\n\n const res = await complete(completeInput, {\n ...call,\n temperature: call.temperature ?? 0,\n });\n\n try {\n const jsonText = stripJsonFence(res.text);\n const parsed = JSON.parse(jsonText) as unknown;\n const data =\n typeof schema.parse === \"function\"\n ? schema.parse(parsed)\n : (() => {\n const r = schema.safeParse!(parsed);\n if (!r.success) throw r.error;\n return r.data as T;\n })();\n\n return {\n data,\n text: res.text,\n provider: res.provider,\n model: res.model,\n usage: res.usage,\n cost: res.cost,\n unknownModel: res.unknownModel,\n cached: res.cached,\n latencyMs: res.latencyMs,\n attempts: res.attempts,\n };\n } catch (err) {\n lastErr = err;\n }\n }\n\n throw new BadRequest(`extract() failed to produce valid data: ${String(lastErr)}`);\n}\n\nfunction stripJsonFence(text: string): string {\n const trimmed = text.trim();\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/i.exec(trimmed);\n return fence?.[1]?.trim() ?? trimmed;\n}\n","import type { CallOptions } from \"../types.js\";\n\n/** Skip cache when temperature > 0 unless opted in. */\nexport function cacheAllowed(\n cache: CallOptions[\"cache\"],\n temperature: number | undefined,\n): cache is NonNullable<CallOptions[\"cache\"]> & object {\n if (!cache) return false;\n if (temperature !== undefined && temperature > 0 && !cache.includeNonDeterministic) return false;\n return true;\n}\n","import { AllProvidersFailed, BadRequest, ProviderError } from \"../errors.js\";\nimport type { AttemptRecord, CallOptions } from \"../types.js\";\n\nexport function errorLabel(error: unknown): string {\n if (error instanceof ProviderError) return error.kind;\n if (error instanceof Error) return error.message;\n return \"unknown\";\n}\n\n/** Failover must stop for these errors. */\nexport function reclassifyFatal(err: unknown, options: CallOptions, attempts: AttemptRecord[]): void {\n if (err instanceof BadRequest) throw err;\n if (err instanceof ProviderError && err.kind === \"bad_request\") {\n throw new BadRequest(err.message, { cause: err });\n }\n if (\n err instanceof ProviderError &&\n err.kind === \"content_filter\" &&\n !options.allowContentFilterFailover\n ) {\n throw new AllProvidersFailed(attempts, \"Content was filtered by the provider\");\n }\n}\n\n/** Kinds where retrying the same provider is pointless. */\nexport function skipsSameProviderRetry(err: unknown): boolean {\n return (\n err instanceof ProviderError &&\n (err.kind === \"overloaded\" ||\n err.kind === \"content_filter\" ||\n err.kind === \"auth\" ||\n err.kind === \"unknown\")\n );\n}\n","import type { RetryOptions } from \"../types.js\";\nimport { ProviderError } from \"../errors.js\";\n\nexport function computeBackoff(\n attemptIndex: number,\n options: RetryOptions = {},\n retryAfterMs?: number,\n): number {\n if (retryAfterMs !== undefined && retryAfterMs > 0) {\n return Math.min(options.maxDelay ?? 10_000, retryAfterMs);\n }\n const base = options.baseDelay ?? 500;\n const max = options.maxDelay ?? 10_000;\n const exp = Math.min(max, base * 2 ** attemptIndex);\n // full jitter\n return Math.floor(Math.random() * exp);\n}\n\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new ProviderError(\"Timed out\", { kind: \"timeout\", provider: \"router\" }));\n return;\n }\n const t = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(t);\n reject(new ProviderError(\"Timed out\", { kind: \"timeout\", provider: \"router\" }));\n },\n { once: true },\n );\n });\n}\n","/** Total time budget across attempts. */\nexport class TimeoutBudget {\n private readonly deadline: number;\n\n constructor(totalMs: number) {\n this.deadline = Date.now() + totalMs;\n }\n\n remaining(): number {\n return Math.max(0, this.deadline - Date.now());\n }\n\n exhausted(): boolean {\n return this.remaining() <= 0;\n }\n\n /** AbortSignal that fires when the remaining budget elapses. */\n signalForAttempt(): { signal: AbortSignal; clear: () => void } {\n const controller = new AbortController();\n const remaining = this.remaining();\n if (remaining <= 0) {\n controller.abort();\n return { signal: controller.signal, clear: () => undefined };\n }\n const timer = setTimeout(() => controller.abort(), remaining);\n return {\n signal: controller.signal,\n clear: () => clearTimeout(timer),\n };\n }\n}\n","{\n \"gpt-4o\": { \"input\": 2.5, \"output\": 10 },\n \"gpt-4o-mini\": { \"input\": 0.15, \"output\": 0.6 },\n \"claude-sonnet-4-5\": { \"input\": 3, \"output\": 15 },\n \"claude-haiku-4-5\": { \"input\": 1, \"output\": 5 },\n \"llama-3.3-70b\": { \"input\": 0.59, \"output\": 0.79 },\n \"llama-3.3-70b-versatile\": { \"input\": 0.59, \"output\": 0.79 }\n}\n","import type { Usage } from \"../types.js\";\nimport prices from \"./prices.json\" with { type: \"json\" };\n\nexport type PriceRow = { input: number; output: number };\n\nexport const PRICES: Record<string, PriceRow> = prices;\n\n/** Whether `model` has a row in the price table (lookup key `cost()` and the router both use). */\nexport function isKnownModel(model: string): boolean {\n return Object.hasOwn(PRICES, model);\n}\n\nconst warnedModels = new Set<string>();\n\n/** Reset the warn-once tracker. Exposed for tests; not part of the public API surface. */\nexport function resetPricingWarnings(): void {\n warnedModels.clear();\n}\n\n/** Estimated USD cost for a completion. `0` for a model missing from `PRICES` — warns once per model. */\nexport function cost(usage: Usage, model: string): number {\n const row = PRICES[model];\n if (!row) {\n if (!warnedModels.has(model)) {\n warnedModels.add(model);\n console.warn(\n `[llm-sdk] No pricing data for model \"${model}\" — cost will report as 0, which means ` +\n `\"unpriced,\" not \"free.\" Extend PRICES or check CompleteResult.unknownModel.`,\n );\n }\n return 0;\n }\n return (usage.input / 1_000_000) * row.input + (usage.output / 1_000_000) * row.output;\n}\n\n/** @deprecated Prefer `cost(usage, model)` */\nexport function estimateCost(model: string, usage: Usage): number {\n return cost(usage, model);\n}\n\nexport { PRICES as PRICING };\n","import { BadRequest } from \"../errors.js\";\nimport type { CallOptions, CompleteArg, Message } from \"../types.js\";\n\n/** Normalize call input + options into `Message[]`. */\nexport function toMessages(input: CompleteArg, options: CallOptions): Message[] {\n const messages: Message[] = [];\n const system = typeof input === \"object\" ? input.system ?? options.system : options.system;\n if (system) messages.push({ role: \"system\", content: system });\n\n if (typeof input === \"string\") {\n messages.push({ role: \"user\", content: input });\n return messages;\n }\n\n if (input.messages?.length) messages.push(...input.messages);\n else if (input.prompt) messages.push({ role: \"user\", content: input.prompt });\n\n if (messages.filter((m) => m.role !== \"system\").length === 0) {\n throw new BadRequest(\"complete() requires a string prompt or messages\");\n }\n\n return messages;\n}\n","import { BadRequest } from \"../errors.js\";\nimport type { ModelRef } from \"../types.js\";\nimport type { ParsedModel } from \"./types.js\";\n\n/** Split `\"provider/model\"`. */\nexport function parseModelRef(ref: ModelRef): ParsedModel {\n const slash = ref.indexOf(\"/\");\n if (slash <= 0 || slash === ref.length - 1) {\n throw new BadRequest(`Invalid model ref \"${ref}\". Expected \"provider/model\".`);\n }\n return {\n provider: ref.slice(0, slash),\n model: ref.slice(slash + 1),\n ref,\n };\n}\n","import type { AdapterRequest, ProviderName } from \"../types.js\";\nimport type { ParsedModel, PreparedCall } from \"./types.js\";\n\nexport function buildAdapterRequest(\n parsed: ParsedModel,\n prepared: PreparedCall,\n signal: AbortSignal,\n): AdapterRequest {\n return {\n model: parsed.model,\n messages: prepared.messages,\n ...(prepared.temperature !== undefined ? { temperature: prepared.temperature } : {}),\n ...(prepared.maxTokens !== undefined ? { maxTokens: prepared.maxTokens } : {}),\n ...(prepared.tools !== undefined ? { tools: prepared.tools } : {}),\n ...(prepared.options.raw?.[parsed.provider as ProviderName]\n ? { raw: prepared.options.raw[parsed.provider as ProviderName] }\n : {}),\n signal,\n };\n}\n","import { cacheKey, parseTtl, type CacheEntry } from \"../cache/index.js\";\nimport { AllProvidersFailed, BadRequest, ProviderError } from \"../errors.js\";\nimport { extractWithSchema } from \"../extract.js\";\nimport { cacheAllowed } from \"../policy/cache.js\";\nimport { errorLabel, reclassifyFatal, skipsSameProviderRetry } from \"../policy/fallback.js\";\nimport { computeBackoff, sleep } from \"../policy/retry.js\";\nimport { TimeoutBudget } from \"../policy/timeout.js\";\nimport { cost, isKnownModel } from \"../pricing/index.js\";\nimport type {\n AttemptRecord,\n CallOptions,\n CompleteArg,\n CompleteResult,\n ExtractInput,\n ExtractResult,\n InferSchemaOutput,\n ModelRef,\n RouteConfig,\n StreamChunk,\n StreamHandle,\n ToolCall,\n Usage,\n} from \"../types.js\";\nimport { toMessages } from \"./messages.js\";\nimport { parseModelRef } from \"./model-ref.js\";\nimport { assertNoConflictingModelFields, mergeOptions, resolveModelChain } from \"./options.js\";\nimport { buildAdapterRequest } from \"./request.js\";\nimport type { RouterState } from \"./state.js\";\nimport type { PreparedCall, Router } from \"./types.js\";\n\n/** Pre-flush buffer size for stream failover. */\nconst STREAM_BUFFER_CHARS = 40;\n\n/** Replay a cache hit as a single chunk. */\nfunction replayFromCache(hit: CacheEntry): StreamHandle {\n async function* run(): AsyncGenerator<StreamChunk> {\n if (hit.text) yield { text: hit.text };\n yield { text: \"\", done: true };\n }\n\n const iterator = run();\n const result: CompleteResult = { ...hit, cached: true, latencyMs: 0, attempts: [] };\n\n return {\n [Symbol.asyncIterator]: () => iterator,\n async result(): Promise<CompleteResult> {\n for await (const _ of iterator) {\n /* drain */\n }\n return result;\n },\n };\n}\n\nexport class RouterImpl<R extends string> implements Router<R> {\n constructor(\n private readonly state: RouterState,\n private readonly routeName?: R,\n ) {}\n\n private get config() {\n return this.state.config;\n }\n\n route(name: R): Router<R> {\n if (!this.config.routes?.[name]) {\n throw new BadRequest(`Unknown route \"${name}\"`);\n }\n return new RouterImpl(this.state, name);\n }\n\n private prepareCall(input: CompleteArg, call: CallOptions): PreparedCall {\n assertNoConflictingModelFields(call, \"call options\");\n const routeConfig = this.activeRoute();\n const options = mergeOptions(this.config, routeConfig, call);\n const modelChain = resolveModelChain(options);\n\n if (modelChain.length === 0) {\n throw new BadRequest(\"No primary model configured\");\n }\n\n const messages = toMessages(input, options);\n const temperature =\n call.temperature ??\n (typeof input === \"object\" ? input.temperature : undefined) ??\n options.temperature;\n const maxTokens =\n call.maxTokens ??\n (typeof input === \"object\" ? input.maxTokens : undefined) ??\n options.maxTokens;\n const tools =\n call.tools ?? (typeof input === \"object\" ? input.tools : undefined) ?? options.tools;\n\n return {\n options,\n modelChain,\n messages,\n ...(temperature !== undefined ? { temperature } : {}),\n ...(maxTokens !== undefined ? { maxTokens } : {}),\n ...(tools !== undefined ? { tools } : {}),\n };\n }\n\n async complete(input: CompleteArg, call: CallOptions = {}): Promise<CompleteResult> {\n const prepared = this.prepareCall(input, call);\n const { options, modelChain, messages, temperature, maxTokens, tools } = prepared;\n\n const keyOpts = {\n ...(temperature !== undefined ? { temperature } : {}),\n ...(maxTokens !== undefined ? { maxTokens } : {}),\n ...(tools !== undefined ? { tools } : {}),\n ...(options.raw !== undefined ? { raw: options.raw } : {}),\n };\n\n const cacheEnabled = cacheAllowed(options.cache, temperature);\n if (cacheEnabled) {\n const hit = this.state.cache.get(cacheKey(modelChain, messages, keyOpts));\n if (hit) {\n return { ...hit, cached: true, latencyMs: 0, attempts: [] };\n }\n }\n\n const budget = new TimeoutBudget(options.timeout ?? 60_000);\n const attempts: AttemptRecord[] = [];\n const retries = options.retry?.attempts ?? 1;\n\n for (let i = 0; i < modelChain.length; i++) {\n const ref = modelChain[i] as ModelRef;\n const parsed = parseModelRef(ref);\n const adapter = this.state.getAdapter(parsed.provider);\n\n for (let retry = 0; retry < retries; retry++) {\n if (budget.exhausted()) {\n attempts.push({\n provider: parsed.provider,\n model: parsed.model,\n error: \"timeout\",\n ms: 0,\n });\n break;\n }\n\n const started = Date.now();\n const { signal, clear } = budget.signalForAttempt();\n\n try {\n const response = await adapter.complete(buildAdapterRequest(parsed, prepared, signal));\n\n clear();\n const ms = Date.now() - started;\n attempts.push({ provider: parsed.provider, model: parsed.model, ms });\n\n const estimated = cost(response.usage, parsed.model);\n const result: CompleteResult = {\n text: response.text,\n provider: parsed.provider,\n model: parsed.model,\n usage: response.usage,\n cost: estimated,\n unknownModel: !isKnownModel(parsed.model),\n cached: false,\n latencyMs: ms,\n attempts,\n toolCalls: response.toolCalls,\n };\n\n if (cacheEnabled && options.cache) {\n const entry: CacheEntry = {\n text: result.text,\n provider: result.provider,\n model: result.model,\n usage: result.usage,\n cost: result.cost,\n unknownModel: result.unknownModel,\n toolCalls: result.toolCalls,\n };\n this.state.cache.set(\n cacheKey(modelChain, messages, keyOpts),\n entry,\n parseTtl(options.cache.ttl ?? \"1h\"),\n );\n }\n\n return result;\n } catch (err) {\n clear();\n const ms = Date.now() - started;\n attempts.push({\n provider: parsed.provider,\n model: parsed.model,\n error: errorLabel(err),\n ms,\n });\n\n reclassifyFatal(err, options, attempts);\n\n const nextRef = modelChain[i + 1] as ModelRef | undefined;\n const isLastRetry = skipsSameProviderRetry(err) || retry >= retries - 1;\n\n if (isLastRetry) {\n if (nextRef) this.config.onFallback?.(ref, nextRef, err);\n break;\n }\n\n const retryAfterMs = err instanceof ProviderError ? err.retryAfterMs : undefined;\n const delay = computeBackoff(retry, options.retry ?? {}, retryAfterMs);\n const wait = Math.min(delay, budget.remaining());\n if (wait > 0) {\n await sleep(wait, AbortSignal.timeout(budget.remaining()));\n }\n }\n }\n }\n\n throw new AllProvidersFailed(attempts);\n }\n\n extract<S, T = InferSchemaOutput<S>>(\n input: ExtractInput<S>,\n call: CallOptions = {},\n ): Promise<ExtractResult<T>> {\n return extractWithSchema<S, T>((i, o) => this.complete(i, o), input, call);\n }\n\n // No retry.attempts loop here, unlike complete() — once a chunk has been yielded to the\n // caller, retrying the same provider would mean sending conflicting text for the same\n // span, so a mid-stream failure fails over (pre-flush) or ends the stream (post-flush)\n // rather than retrying in place. See \"Streaming vs complete()\" in the fallback guide.\n stream(input: CompleteArg, call: CallOptions = {}): StreamHandle {\n const prepared = this.prepareCall(input, call);\n const { options, modelChain, messages, temperature, maxTokens, tools } = prepared;\n\n const keyOpts = {\n ...(temperature !== undefined ? { temperature } : {}),\n ...(maxTokens !== undefined ? { maxTokens } : {}),\n ...(tools !== undefined ? { tools } : {}),\n ...(options.raw !== undefined ? { raw: options.raw } : {}),\n };\n const cacheEnabled = cacheAllowed(options.cache, temperature);\n\n if (cacheEnabled) {\n const hit = this.state.cache.get(cacheKey(modelChain, messages, keyOpts));\n if (hit) return replayFromCache(hit);\n }\n\n const budget = new TimeoutBudget(options.timeout ?? 60_000);\n const attempts: AttemptRecord[] = [];\n let finalResult: CompleteResult | undefined;\n let finalError: unknown;\n const config = this.config;\n const state = this.state;\n\n async function* run(): AsyncGenerator<StreamChunk> {\n try {\n for (let i = 0; i < modelChain.length; i++) {\n const ref = modelChain[i] as ModelRef;\n const parsed = parseModelRef(ref);\n const adapter = state.getAdapter(parsed.provider);\n\n const started = Date.now();\n const { signal, clear } = budget.signalForAttempt();\n\n let fullText = \"\";\n let buffer = \"\";\n let flushed = false;\n let usage: Usage = { input: 0, output: 0 };\n let toolCalls: ToolCall[] = [];\n\n try {\n for await (const evt of adapter.stream(buildAdapterRequest(parsed, prepared, signal))) {\n if (evt.type === \"delta\") {\n fullText += evt.text;\n if (!flushed) {\n buffer += evt.text;\n if (buffer.length >= STREAM_BUFFER_CHARS) {\n flushed = true;\n yield { text: buffer };\n buffer = \"\";\n }\n } else {\n yield { text: evt.text };\n }\n } else {\n usage = evt.usage;\n toolCalls = evt.toolCalls;\n }\n }\n\n clear();\n const ms = Date.now() - started;\n attempts.push({ provider: parsed.provider, model: parsed.model, ms });\n\n if (buffer.length > 0) yield { text: buffer };\n yield { text: \"\", done: true };\n\n const estimated = cost(usage, parsed.model);\n const unknownModel = !isKnownModel(parsed.model);\n\n if (cacheEnabled && options.cache) {\n const entry: CacheEntry = {\n text: fullText,\n provider: parsed.provider,\n model: parsed.model,\n usage,\n cost: estimated,\n unknownModel,\n toolCalls,\n };\n state.cache.set(cacheKey(modelChain, messages, keyOpts), entry, parseTtl(options.cache.ttl ?? \"1h\"));\n }\n\n finalResult = {\n text: fullText,\n provider: parsed.provider,\n model: parsed.model,\n usage,\n cost: estimated,\n unknownModel,\n cached: false,\n latencyMs: ms,\n attempts,\n toolCalls,\n };\n return;\n } catch (err) {\n clear();\n const ms = Date.now() - started;\n attempts.push({ provider: parsed.provider, model: parsed.model, error: errorLabel(err), ms });\n\n reclassifyFatal(err, options, attempts);\n\n if (flushed) {\n // Partial output already visible — cannot fail over cleanly.\n throw err;\n }\n\n const nextRef = modelChain[i + 1] as ModelRef | undefined;\n if (nextRef) {\n config.onFallback?.(ref, nextRef, err);\n continue;\n }\n throw new AllProvidersFailed(attempts);\n }\n }\n throw new AllProvidersFailed(attempts);\n } catch (err) {\n finalError = err;\n throw err;\n }\n }\n\n const iterator = run();\n\n return {\n [Symbol.asyncIterator]: () => iterator,\n async result(): Promise<CompleteResult> {\n for await (const _ of iterator) {\n /* drain */\n }\n if (finalResult) return finalResult;\n throw finalError ?? new Error(\"stream ended without a result\");\n },\n };\n }\n\n private activeRoute(): RouteConfig | undefined {\n if (this.routeName) return this.config.routes?.[this.routeName];\n if (this.config.default && this.config.routes?.[this.config.default]) {\n return this.config.routes[this.config.default];\n }\n return undefined;\n }\n}\n","/** Minimal SSE reader (`event:` / `data:` frames). */\nexport interface SseEvent {\n event?: string;\n data: string;\n}\n\nexport async function* readSseEvents(body: ReadableStream<Uint8Array>): AsyncGenerator<SseEvent> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n let sep: number;\n while ((sep = buffer.indexOf(\"\\n\\n\")) !== -1) {\n const rawEvent = buffer.slice(0, sep);\n buffer = buffer.slice(sep + 2);\n yield parseFrame(rawEvent);\n }\n }\n if (buffer.trim().length > 0) yield parseFrame(buffer);\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction parseFrame(raw: string): SseEvent {\n let event: string | undefined;\n const dataLines: string[] = [];\n for (const line of raw.split(\"\\n\")) {\n if (line.startsWith(\"event:\")) event = line.slice(6).trim();\n else if (line.startsWith(\"data:\")) dataLines.push(line.slice(5).trim());\n }\n return { ...(event !== undefined ? { event } : {}), data: dataLines.join(\"\\n\") };\n}\n","import { providerErrorFromHttp, ProviderError } from \"../errors.js\";\nimport type { AdapterRequest, AdapterResponse, AdapterStreamEvent, Message, ToolCall, Usage } from \"../types.js\";\nimport { readSseEvents } from \"./sse.js\";\nimport { toJsonSchema } from \"./zod-schema.js\";\n\nexport function envKey(name: string): string | undefined {\n return typeof process !== \"undefined\" ? process.env[name] : undefined;\n}\n\n/** POST JSON; classifies network / HTTP failures as `ProviderError`. */\nasync function postJson(\n adapter: { name: string; baseUrl: string; apiKey: string },\n path: string,\n body: Record<string, unknown>,\n signal?: AbortSignal,\n): Promise<Response> {\n const url = `${adapter.baseUrl.replace(/\\/$/, \"\")}${path}`;\n let response: Response;\n try {\n response = await fetch(url, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${adapter.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n ...(signal ? { signal } : {}),\n });\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new ProviderError(\"Timed out\", { kind: \"timeout\", provider: adapter.name, cause: err });\n }\n throw new ProviderError(\"Network error\", {\n kind: \"network\",\n provider: adapter.name,\n cause: err,\n });\n }\n\n if (!response.ok) {\n const responseBody = await response.text().catch(() => \"\");\n throw providerErrorFromHttp(\n adapter.name,\n response.status,\n responseBody,\n response.headers.get(\"retry-after\"),\n );\n }\n return response;\n}\n\n/** Map SDK messages to OpenAI chat message shapes (including tools). */\nfunction toOpenAiMessages(messages: Message[]) {\n return messages.map((m) => {\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n return {\n role: \"assistant\",\n content: m.content || null,\n tool_calls: m.toolCalls.map((c) => ({\n id: c.id,\n type: \"function\" as const,\n function: { name: c.name, arguments: JSON.stringify(c.args) },\n })),\n };\n }\n if (m.role === \"tool\") {\n return { role: \"tool\", tool_call_id: m.toolCallId, content: m.content };\n }\n return { role: m.role, content: m.content, ...(m.name ? { name: m.name } : {}) };\n });\n}\n\nfunction toOpenAiTools(request: AdapterRequest) {\n if (!request.tools?.length) return undefined;\n return request.tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n }));\n}\n\nfunction parseOpenAiToolCalls(\n raw: Array<{ id?: string; function?: { name?: string; arguments?: string } }> | undefined,\n): ToolCall[] {\n if (!raw?.length) return [];\n return raw.map((c, i) => {\n const name = c.function?.name ?? \"\";\n const argsText = c.function?.arguments ?? \"{}\";\n let args: unknown;\n try {\n args = JSON.parse(argsText);\n } catch {\n args = argsText;\n }\n return { id: c.id ?? `call_${i}`, name, args };\n });\n}\n\n/** Shared OpenAI-compatible `/chat/completions` caller. */\nexport async function openAiCompatibleComplete(\n adapter: { name: string; baseUrl: string; apiKey: string },\n request: AdapterRequest,\n): Promise<AdapterResponse> {\n const response = await postJson(\n adapter,\n \"/chat/completions\",\n {\n model: request.model,\n messages: toOpenAiMessages(request.messages),\n temperature: request.temperature,\n max_tokens: request.maxTokens,\n tools: toOpenAiTools(request),\n ...request.raw,\n },\n request.signal,\n );\n\n const data = (await response.json()) as {\n choices?: Array<{\n message?: {\n content?: string;\n tool_calls?: Array<{ id?: string; function?: { name?: string; arguments?: string } }>;\n };\n finish_reason?: string;\n }>;\n usage?: { prompt_tokens?: number; completion_tokens?: number };\n };\n\n const choice = data.choices?.[0];\n\n if (choice?.finish_reason === \"content_filter\") {\n throw new ProviderError(\"Content was filtered by the provider\", {\n kind: \"content_filter\",\n provider: adapter.name,\n retryable: false,\n });\n }\n\n return {\n text: choice?.message?.content ?? \"\",\n usage: {\n input: data.usage?.prompt_tokens ?? 0,\n output: data.usage?.completion_tokens ?? 0,\n },\n toolCalls: parseOpenAiToolCalls(choice?.message?.tool_calls),\n ...(choice?.finish_reason ? { finishReason: choice.finish_reason } : {}),\n };\n}\n\ninterface StreamedToolCall {\n id?: string;\n name?: string;\n args: string;\n}\n\n/** Merge one delta.tool_calls chunk into the by-index accumulator. */\nfunction accumulateToolCallDelta(\n acc: Map<number, StreamedToolCall>,\n deltas: Array<{ index?: number; id?: string; function?: { name?: string; arguments?: string } }>,\n): void {\n for (const d of deltas) {\n const index = d.index ?? 0;\n const entry = acc.get(index) ?? { args: \"\" };\n if (d.id) entry.id = d.id;\n if (d.function?.name) entry.name = d.function.name;\n if (d.function?.arguments) entry.args += d.function.arguments;\n acc.set(index, entry);\n }\n}\n\n/** Resolve accumulated deltas into finished tool calls, parsing each call's JSON args. */\nfunction finalizeToolCalls(acc: Map<number, StreamedToolCall>): ToolCall[] {\n return [...acc.entries()]\n .sort(([a], [b]) => a - b)\n .map(([, c], i) => {\n let args: unknown;\n try {\n args = c.args ? JSON.parse(c.args) : {};\n } catch {\n args = c.args;\n }\n return { id: c.id ?? `call_${i}`, name: c.name ?? \"\", args };\n });\n}\n\n/** OpenAI-compatible streaming. Tool call deltas are accumulated and surfaced on the `done` event. */\nexport async function* openAiCompatibleStream(\n adapter: { name: string; baseUrl: string; apiKey: string },\n request: AdapterRequest,\n): AsyncGenerator<AdapterStreamEvent> {\n const response = await postJson(\n adapter,\n \"/chat/completions\",\n {\n model: request.model,\n messages: toOpenAiMessages(request.messages),\n temperature: request.temperature,\n max_tokens: request.maxTokens,\n tools: toOpenAiTools(request),\n stream: true,\n stream_options: { include_usage: true },\n ...request.raw,\n },\n request.signal,\n );\n\n if (!response.body) {\n throw new ProviderError(\"Empty stream body\", { kind: \"network\", provider: adapter.name });\n }\n\n let usage: Usage = { input: 0, output: 0 };\n let finishReason: string | undefined;\n const toolCallAcc = new Map<number, StreamedToolCall>();\n\n try {\n for await (const evt of readSseEvents(response.body)) {\n if (!evt.data || evt.data === \"[DONE]\") continue;\n let parsed: {\n choices?: Array<{\n delta?: {\n content?: string;\n tool_calls?: Array<{\n index?: number;\n id?: string;\n function?: { name?: string; arguments?: string };\n }>;\n };\n finish_reason?: string;\n }>;\n usage?: { prompt_tokens?: number; completion_tokens?: number };\n };\n try {\n parsed = JSON.parse(evt.data);\n } catch {\n continue;\n }\n\n const choice = parsed.choices?.[0];\n if (typeof choice?.delta?.content === \"string\" && choice.delta.content.length > 0) {\n yield { type: \"delta\", text: choice.delta.content };\n }\n if (choice?.delta?.tool_calls?.length) {\n accumulateToolCallDelta(toolCallAcc, choice.delta.tool_calls);\n }\n if (choice?.finish_reason) finishReason = choice.finish_reason;\n if (parsed.usage) {\n usage = {\n input: parsed.usage.prompt_tokens ?? 0,\n output: parsed.usage.completion_tokens ?? 0,\n };\n }\n }\n } catch (err) {\n if (err instanceof ProviderError) throw err;\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new ProviderError(\"Timed out\", { kind: \"timeout\", provider: adapter.name, cause: err });\n }\n throw new ProviderError(\"Network error\", { kind: \"network\", provider: adapter.name, cause: err });\n }\n\n if (finishReason === \"content_filter\") {\n throw new ProviderError(\"Content was filtered by the provider\", {\n kind: \"content_filter\",\n provider: adapter.name,\n retryable: false,\n });\n }\n\n yield {\n type: \"done\",\n usage,\n toolCalls: finalizeToolCalls(toolCallAcc),\n ...(finishReason ? { finishReason } : {}),\n };\n}\n\nexport function requireApiKey(\n provider: string,\n envName: string,\n explicit?: string,\n): string {\n const key = explicit ?? envKey(envName);\n if (!key) {\n throw new ProviderError(`Missing API key (${envName})`, {\n kind: \"auth\",\n provider,\n retryable: false,\n });\n }\n return key;\n}\n","import type { ErrorKind } from \"../errors.js\";\nimport { providerErrorFromHttp, ProviderError } from \"../errors.js\";\nimport type {\n Adapter,\n AdapterContext,\n AdapterRequest,\n AdapterResponse,\n AdapterStreamEvent,\n Message,\n ToolCall,\n Usage,\n} from \"../types.js\";\nimport { readSseEvents } from \"./sse.js\";\nimport { requireApiKey } from \"./openai-compatible.js\";\nimport { toJsonSchema } from \"./zod-schema.js\";\n\nfunction toAnthropicTools(request: AdapterRequest) {\n if (!request.tools?.length) return undefined;\n return request.tools.map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n }));\n}\n\nfunction parseAnthropicToolCalls(\n content: Array<{ type: string; id?: string; name?: string; input?: unknown }> | undefined,\n): ToolCall[] {\n if (!content?.length) return [];\n return content\n .filter((c) => c.type === \"tool_use\")\n .map((c, i) => ({ id: c.id ?? `call_${i}`, name: c.name ?? \"\", args: c.input }));\n}\n\ntype AnthropicContentBlock =\n | { type: \"text\"; text: string }\n | { type: \"tool_use\"; id: string; name: string; input: unknown }\n | { type: \"tool_result\"; tool_use_id: string; content: string };\n\ninterface AnthropicMessage {\n role: \"user\" | \"assistant\";\n content: string | AnthropicContentBlock[];\n}\n\nfunction isToolResultMessage(m: AnthropicMessage): m is AnthropicMessage & { content: AnthropicContentBlock[] } {\n return Array.isArray(m.content) && m.content.every((b) => b.type === \"tool_result\");\n}\n\n/** Map SDK messages to Anthropic's format; consecutive tool results merge into one user turn. */\nfunction toAnthropicMessages(messages: Message[]) {\n const system = messages\n .filter((m) => m.role === \"system\")\n .map((m) => m.content)\n .join(\"\\n\");\n\n const rest: AnthropicMessage[] = [];\n\n for (const m of messages) {\n if (m.role === \"system\") continue;\n\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n const blocks: AnthropicContentBlock[] = [];\n if (m.content) blocks.push({ type: \"text\", text: m.content });\n for (const call of m.toolCalls) {\n blocks.push({ type: \"tool_use\", id: call.id, name: call.name, input: call.args });\n }\n rest.push({ role: \"assistant\", content: blocks });\n continue;\n }\n\n if (m.role === \"tool\") {\n const block: AnthropicContentBlock = {\n type: \"tool_result\",\n tool_use_id: m.toolCallId ?? \"\",\n content: m.content,\n };\n const prev = rest.at(-1);\n if (prev?.role === \"user\" && isToolResultMessage(prev)) {\n prev.content.push(block);\n } else {\n rest.push({ role: \"user\", content: [block] });\n }\n continue;\n }\n\n rest.push({ role: m.role === \"assistant\" ? \"assistant\" : \"user\", content: m.content });\n }\n\n return { system, messages: rest };\n}\n\nfunction classifyAnthropicErrorType(type: string | undefined): ErrorKind {\n switch (type) {\n case \"rate_limit_error\":\n return \"rate_limit\";\n case \"overloaded_error\":\n return \"overloaded\";\n case \"authentication_error\":\n case \"permission_error\":\n return \"auth\";\n case \"invalid_request_error\":\n case \"not_found_error\":\n return \"bad_request\";\n case \"timeout_error\":\n return \"timeout\";\n case \"api_error\":\n return \"server_error\";\n default:\n return \"unknown\";\n }\n}\n\nexport class AnthropicAdapter implements Adapter {\n readonly name = \"anthropic\";\n\n constructor(private readonly ctx: AdapterContext = {}) {}\n\n private headers(): Record<string, string> {\n return {\n \"x-api-key\": requireApiKey(this.name, \"ANTHROPIC_API_KEY\", this.ctx.apiKey),\n \"anthropic-version\": \"2023-06-01\",\n \"Content-Type\": \"application/json\",\n };\n }\n\n private url(): string {\n return `${(this.ctx.baseUrl ?? \"https://api.anthropic.com\").replace(/\\/$/, \"\")}/v1/messages`;\n }\n\n private async post(request: AdapterRequest, extra: Record<string, unknown> = {}): Promise<Response> {\n const { system, messages } = toAnthropicMessages(request.messages);\n // Auth check outside try so missing keys stay `auth`, not re-wrapped as `network`.\n const headers = this.headers();\n let response: Response;\n try {\n response = await fetch(this.url(), {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n model: request.model,\n max_tokens: request.maxTokens ?? 1024,\n temperature: request.temperature,\n system: system || undefined,\n messages,\n tools: toAnthropicTools(request),\n ...extra,\n ...request.raw,\n }),\n ...(request.signal ? { signal: request.signal } : {}),\n });\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new ProviderError(\"Timed out\", { kind: \"timeout\", provider: this.name, cause: err });\n }\n throw new ProviderError(\"Network error\", { kind: \"network\", provider: this.name, cause: err });\n }\n\n if (!response.ok) {\n const body = await response.text().catch(() => \"\");\n throw providerErrorFromHttp(\n this.name,\n response.status,\n body,\n response.headers.get(\"retry-after\"),\n );\n }\n return response;\n }\n\n async complete(request: AdapterRequest): Promise<AdapterResponse> {\n const response = await this.post(request);\n\n const data = (await response.json()) as {\n content?: Array<{ type: string; text?: string; id?: string; name?: string; input?: unknown }>;\n usage?: { input_tokens?: number; output_tokens?: number };\n stop_reason?: string;\n };\n\n if (data.stop_reason === \"refusal\") {\n throw new ProviderError(\"Content was filtered by the provider\", {\n kind: \"content_filter\",\n provider: this.name,\n retryable: false,\n });\n }\n\n const text =\n data.content?.filter((c) => c.type === \"text\").map((c) => c.text ?? \"\").join(\"\") ?? \"\";\n\n return {\n text,\n usage: {\n input: data.usage?.input_tokens ?? 0,\n output: data.usage?.output_tokens ?? 0,\n },\n toolCalls: parseAnthropicToolCalls(data.content),\n ...(data.stop_reason ? { finishReason: data.stop_reason } : {}),\n };\n }\n\n /** Streaming accumulates `tool_use` blocks from `input_json_delta` events; surfaced on `done`. */\n async *stream(request: AdapterRequest): AsyncGenerator<AdapterStreamEvent> {\n const response = await this.post(request, { stream: true });\n\n if (!response.body) {\n throw new ProviderError(\"Empty stream body\", { kind: \"network\", provider: this.name });\n }\n\n let usage: Usage = { input: 0, output: 0 };\n let stopReason: string | undefined;\n const toolBlocks = new Map<number, { id?: string; name?: string; json: string }>();\n\n try {\n for await (const evt of readSseEvents(response.body)) {\n if (!evt.data) continue;\n let parsed: {\n message?: { usage?: { input_tokens?: number } };\n index?: number;\n content_block?: { type?: string; id?: string; name?: string };\n delta?: { type?: string; text?: string; partial_json?: string; stop_reason?: string };\n usage?: { output_tokens?: number };\n error?: { type?: string; message?: string };\n };\n try {\n parsed = JSON.parse(evt.data);\n } catch {\n continue;\n }\n\n if (evt.event === \"message_start\") {\n usage.input = parsed.message?.usage?.input_tokens ?? 0;\n } else if (evt.event === \"content_block_start\" && parsed.content_block?.type === \"tool_use\") {\n toolBlocks.set(parsed.index ?? 0, {\n ...(parsed.content_block.id ? { id: parsed.content_block.id } : {}),\n ...(parsed.content_block.name ? { name: parsed.content_block.name } : {}),\n json: \"\",\n });\n } else if (evt.event === \"content_block_delta\" && parsed.delta?.type === \"text_delta\") {\n if (parsed.delta.text) yield { type: \"delta\", text: parsed.delta.text };\n } else if (evt.event === \"content_block_delta\" && parsed.delta?.type === \"input_json_delta\") {\n const block = toolBlocks.get(parsed.index ?? 0);\n if (block && parsed.delta.partial_json) block.json += parsed.delta.partial_json;\n } else if (evt.event === \"message_delta\") {\n if (parsed.usage?.output_tokens !== undefined) usage.output = parsed.usage.output_tokens;\n if (parsed.delta?.stop_reason) stopReason = parsed.delta.stop_reason;\n } else if (evt.event === \"error\") {\n throw new ProviderError(parsed.error?.message ?? \"Anthropic stream error\", {\n kind: classifyAnthropicErrorType(parsed.error?.type),\n provider: this.name,\n });\n }\n }\n } catch (err) {\n if (err instanceof ProviderError) throw err;\n if (err instanceof Error && err.name === \"AbortError\") {\n throw new ProviderError(\"Timed out\", { kind: \"timeout\", provider: this.name, cause: err });\n }\n throw new ProviderError(\"Network error\", { kind: \"network\", provider: this.name, cause: err });\n }\n\n if (stopReason === \"refusal\") {\n throw new ProviderError(\"Content was filtered by the provider\", {\n kind: \"content_filter\",\n provider: this.name,\n retryable: false,\n });\n }\n\n const toolCalls: ToolCall[] = [...toolBlocks.entries()]\n .sort(([a], [b]) => a - b)\n .map(([, b], i) => {\n let args: unknown;\n try {\n args = b.json ? JSON.parse(b.json) : {};\n } catch {\n args = b.json;\n }\n return { id: b.id ?? `call_${i}`, name: b.name ?? \"\", args };\n });\n\n yield { type: \"done\", usage, toolCalls, ...(stopReason ? { finishReason: stopReason } : {}) };\n }\n}\n","import type { Adapter, AdapterContext, AdapterRequest, AdapterResponse, AdapterStreamEvent } from \"../types.js\";\nimport { openAiCompatibleComplete, openAiCompatibleStream, requireApiKey } from \"./openai-compatible.js\";\n\nexport class GroqAdapter implements Adapter {\n readonly name = \"groq\";\n\n constructor(private readonly ctx: AdapterContext = {}) {}\n\n private target() {\n return {\n name: this.name,\n baseUrl: this.ctx.baseUrl ?? \"https://api.groq.com/openai/v1\",\n apiKey: requireApiKey(this.name, \"GROQ_API_KEY\", this.ctx.apiKey),\n };\n }\n\n async complete(request: AdapterRequest): Promise<AdapterResponse> {\n return openAiCompatibleComplete(this.target(), request);\n }\n\n stream(request: AdapterRequest): AsyncIterable<AdapterStreamEvent> {\n return openAiCompatibleStream(this.target(), request);\n }\n}\n","import type { Adapter, AdapterContext, AdapterRequest, AdapterResponse, AdapterStreamEvent } from \"../types.js\";\nimport { envKey, openAiCompatibleComplete, openAiCompatibleStream } from \"./openai-compatible.js\";\n\n/** Ollama (also registered as `local`). */\nexport class OllamaAdapter implements Adapter {\n readonly name: \"ollama\" | \"local\";\n\n constructor(\n private readonly ctx: AdapterContext = {},\n name: \"ollama\" | \"local\" = \"ollama\",\n ) {\n this.name = name;\n }\n\n private target() {\n return {\n name: this.name,\n baseUrl: this.ctx.baseUrl ?? \"http://127.0.0.1:11434/v1\",\n apiKey: this.ctx.apiKey ?? envKey(\"LOCAL_API_KEY\") ?? envKey(\"OLLAMA_API_KEY\") ?? \"ollama\",\n };\n }\n\n async complete(request: AdapterRequest): Promise<AdapterResponse> {\n return openAiCompatibleComplete(this.target(), request);\n }\n\n stream(request: AdapterRequest): AsyncIterable<AdapterStreamEvent> {\n return openAiCompatibleStream(this.target(), request);\n }\n}\n","import type { Adapter, AdapterContext, AdapterRequest, AdapterResponse, AdapterStreamEvent } from \"../types.js\";\nimport { openAiCompatibleComplete, openAiCompatibleStream, requireApiKey } from \"./openai-compatible.js\";\n\nexport class OpenAIAdapter implements Adapter {\n readonly name = \"openai\";\n\n constructor(private readonly ctx: AdapterContext = {}) {}\n\n private target() {\n return {\n name: this.name,\n baseUrl: this.ctx.baseUrl ?? \"https://api.openai.com/v1\",\n apiKey: requireApiKey(this.name, \"OPENAI_API_KEY\", this.ctx.apiKey),\n };\n }\n\n async complete(request: AdapterRequest): Promise<AdapterResponse> {\n return openAiCompatibleComplete(this.target(), request);\n }\n\n stream(request: AdapterRequest): AsyncIterable<AdapterStreamEvent> {\n return openAiCompatibleStream(this.target(), request);\n }\n}\n","import type { Adapter, AdapterContext, ProviderName, ProviderOverrideConfig } from \"../types.js\";\nimport { AnthropicAdapter } from \"./anthropic.js\";\nimport { GroqAdapter } from \"./groq.js\";\nimport { OllamaAdapter } from \"./ollama.js\";\nimport { OpenAIAdapter } from \"./openai.js\";\n\nexport type { Adapter };\n\nexport function createAdapter(\n provider: ProviderName | string,\n ctx: AdapterContext & {\n providers?: Partial<Record<ProviderName, ProviderOverrideConfig>>;\n } = {},\n): Adapter {\n const override = ctx.providers?.[provider as ProviderName];\n const adapterCtx: AdapterContext = {\n ...(override?.apiKey !== undefined ? { apiKey: override.apiKey } : {}),\n ...(override?.baseUrl !== undefined ? { baseUrl: override.baseUrl } : {}),\n ...(override?.timeoutMs !== undefined ? { timeoutMs: override.timeoutMs } : {}),\n ...(ctx.apiKey !== undefined ? { apiKey: ctx.apiKey } : {}),\n ...(ctx.baseUrl !== undefined ? { baseUrl: ctx.baseUrl } : {}),\n };\n\n switch (provider) {\n case \"openai\":\n return new OpenAIAdapter(adapterCtx);\n case \"anthropic\":\n return new AnthropicAdapter(adapterCtx);\n case \"groq\":\n return new GroqAdapter(adapterCtx);\n case \"ollama\":\n return new OllamaAdapter(adapterCtx, \"ollama\");\n case \"local\":\n return new OllamaAdapter(adapterCtx, \"local\");\n default:\n throw new Error(\n `Unknown provider \"${provider}\". Register a custom Adapter for it via createRouter({ adapters: { \"${provider}\": ... } }).`,\n );\n }\n}\n","import { createAdapter } from \"../adapters/index.js\";\nimport { MemoryCache } from \"../cache/index.js\";\nimport type { Adapter, RouterConfig } from \"../types.js\";\n\n/** Per-router cache + lazily created adapters. */\nexport class RouterState {\n readonly cache = new MemoryCache();\n readonly adapters = new Map<string, Adapter>();\n\n constructor(readonly config: RouterConfig) {}\n\n getAdapter(provider: string): Adapter {\n let adapter = this.adapters.get(provider);\n if (!adapter) {\n adapter =\n this.config.adapters?.[provider] ??\n createAdapter(provider, {\n ...(this.config.providers !== undefined ? { providers: this.config.providers } : {}),\n });\n this.adapters.set(provider, adapter);\n }\n return adapter;\n }\n}\n","import { BadRequest } from \"../errors.js\";\nimport type { RouteConfig, RouterConfig } from \"../types.js\";\nimport { assertNoConflictingModelFields } from \"./options.js\";\nimport { RouterImpl } from \"./router-impl.js\";\nimport { RouterState } from \"./state.js\";\nimport type { Router } from \"./types.js\";\n\nexport function createRouter<const C extends RouterConfig>(\n config: C,\n): Router<C[\"routes\"] extends Record<infer K, RouteConfig> ? Extract<K, string> : string> {\n if (!config.primary && !config.routes) {\n throw new BadRequest(\"createRouter() requires primary or routes\");\n }\n\n assertNoConflictingModelFields(config, \"createRouter() config\");\n for (const [name, route] of Object.entries(config.routes ?? {})) {\n assertNoConflictingModelFields(route, `route \"${name}\"`);\n }\n\n type RouteNames = C[\"routes\"] extends Record<infer K, RouteConfig> ? Extract<K, string> : string;\n const state = new RouterState(config);\n const router = new RouterImpl<RouteNames>(state);\n\n if (config.default && config.routes) {\n return router.route(config.default as RouteNames);\n }\n\n return router;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { CallOptions } from "../types.js";
2
+ /** Skip cache when temperature > 0 unless opted in. */
3
+ export declare function cacheAllowed(cache: CallOptions["cache"], temperature: number | undefined): cache is NonNullable<CallOptions["cache"]> & object;
4
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/policy/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,uDAAuD;AACvD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAIrD"}
@@ -0,0 +1,7 @@
1
+ import type { AttemptRecord, CallOptions } from "../types.js";
2
+ export declare function errorLabel(error: unknown): string;
3
+ /** Failover must stop for these errors. */
4
+ export declare function reclassifyFatal(err: unknown, options: CallOptions, attempts: AttemptRecord[]): void;
5
+ /** Kinds where retrying the same provider is pointless. */
6
+ export declare function skipsSameProviderRetry(err: unknown): boolean;
7
+ //# sourceMappingURL=fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/policy/fallback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIjD;AAED,2CAA2C;AAC3C,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAYnG;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQ5D"}
@@ -0,0 +1,4 @@
1
+ import type { RetryOptions } from "../types.js";
2
+ export declare function computeBackoff(attemptIndex: number, options?: RetryOptions, retryAfterMs?: number): number;
3
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
4
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/policy/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,YAAiB,EAC1B,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CASR;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE"}
@@ -0,0 +1,13 @@
1
+ /** Total time budget across attempts. */
2
+ export declare class TimeoutBudget {
3
+ private readonly deadline;
4
+ constructor(totalMs: number);
5
+ remaining(): number;
6
+ exhausted(): boolean;
7
+ /** AbortSignal that fires when the remaining budget elapses. */
8
+ signalForAttempt(): {
9
+ signal: AbortSignal;
10
+ clear: () => void;
11
+ };
12
+ }
13
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/policy/timeout.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,EAAE,MAAM;IAI3B,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,OAAO;IAIpB,gEAAgE;IAChE,gBAAgB,IAAI;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,IAAI,CAAA;KAAE;CAa/D"}
@@ -0,0 +1,16 @@
1
+ import type { Usage } from "../types.js";
2
+ export type PriceRow = {
3
+ input: number;
4
+ output: number;
5
+ };
6
+ export declare const PRICES: Record<string, PriceRow>;
7
+ /** Whether `model` has a row in the price table (lookup key `cost()` and the router both use). */
8
+ export declare function isKnownModel(model: string): boolean;
9
+ /** Reset the warn-once tracker. Exposed for tests; not part of the public API surface. */
10
+ export declare function resetPricingWarnings(): void;
11
+ /** Estimated USD cost for a completion. `0` for a model missing from `PRICES` — warns once per model. */
12
+ export declare function cost(usage: Usage, model: string): number;
13
+ /** @deprecated Prefer `cost(usage, model)` */
14
+ export declare function estimateCost(model: string, usage: Usage): number;
15
+ export { PRICES as PRICING };
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pricing/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,MAAM,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAU,CAAC;AAEvD,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAID,0FAA0F;AAC1F,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,yGAAyG;AACzG,wBAAgB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAaxD;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAEhE;AAED,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { RouteConfig, RouterConfig } from "../types.js";
2
+ import type { Router } from "./types.js";
3
+ export declare function createRouter<const C extends RouterConfig>(config: C): Router<C["routes"] extends Record<infer K, RouteConfig> ? Extract<K, string> : string>;
4
+ //# sourceMappingURL=create-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-router.d.ts","sourceRoot":"","sources":["../../src/router/create-router.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,wBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,EACvD,MAAM,EAAE,CAAC,GACR,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAmBxF"}
@@ -0,0 +1,4 @@
1
+ import type { CallOptions, CompleteArg, Message } from "../types.js";
2
+ /** Normalize call input + options into `Message[]`. */
3
+ export declare function toMessages(input: CompleteArg, options: CallOptions): Message[];
4
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/router/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAErE,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,EAAE,CAkB9E"}
@@ -0,0 +1,5 @@
1
+ import type { ModelRef } from "../types.js";
2
+ import type { ParsedModel } from "./types.js";
3
+ /** Split `"provider/model"`. */
4
+ export declare function parseModelRef(ref: ModelRef): ParsedModel;
5
+ //# sourceMappingURL=model-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-ref.d.ts","sourceRoot":"","sources":["../../src/router/model-ref.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,gCAAgC;AAChC,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,CAUxD"}
@@ -0,0 +1,7 @@
1
+ import type { CallOptions, RouteConfig, RouterConfig } from "../types.js";
2
+ /** Reject configs that set both `model` and `primary`. */
3
+ export declare function assertNoConflictingModelFields(o: CallOptions, where: string): void;
4
+ /** Merge order: call > route > global. */
5
+ export declare function mergeOptions(global: RouterConfig, route?: RouteConfig, call?: CallOptions): CallOptions;
6
+ export declare function resolveModelChain(options: CallOptions): string[];
7
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/router/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1E,0DAA0D;AAC1D,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOlF;AAED,0CAA0C;AAC1C,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,KAAK,CAAC,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,WAAW,GACjB,WAAW,CAqBb;AAsBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE,CAIhE"}
@@ -0,0 +1,4 @@
1
+ import type { AdapterRequest } from "../types.js";
2
+ import type { ParsedModel, PreparedCall } from "./types.js";
3
+ export declare function buildAdapterRequest(parsed: ParsedModel, prepared: PreparedCall, signal: AbortSignal): AdapterRequest;
4
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/router/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,WAAW,GAClB,cAAc,CAYhB"}
@@ -0,0 +1,16 @@
1
+ import type { CallOptions, CompleteArg, CompleteResult, ExtractInput, ExtractResult, InferSchemaOutput, StreamHandle } from "../types.js";
2
+ import type { RouterState } from "./state.js";
3
+ import type { Router } from "./types.js";
4
+ export declare class RouterImpl<R extends string> implements Router<R> {
5
+ private readonly state;
6
+ private readonly routeName?;
7
+ constructor(state: RouterState, routeName?: R | undefined);
8
+ private get config();
9
+ route(name: R): Router<R>;
10
+ private prepareCall;
11
+ complete(input: CompleteArg, call?: CallOptions): Promise<CompleteResult>;
12
+ extract<S, T = InferSchemaOutput<S>>(input: ExtractInput<S>, call?: CallOptions): Promise<ExtractResult<T>>;
13
+ stream(input: CompleteArg, call?: CallOptions): StreamHandle;
14
+ private activeRoute;
15
+ }
16
+ //# sourceMappingURL=router-impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-impl.d.ts","sourceRoot":"","sources":["../../src/router/router-impl.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EAIjB,YAAY,EAGb,MAAM,aAAa,CAAC;AAKrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAgB,MAAM,EAAE,MAAM,YAAY,CAAC;AA0BvD,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAE1D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBADV,KAAK,EAAE,WAAW,EAClB,SAAS,CAAC,EAAE,CAAC,YAAA;IAGhC,OAAO,KAAK,MAAM,GAEjB;IAED,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAOzB,OAAO,CAAC,WAAW;IAgCb,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IAkHnF,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,EACjC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAQ5B,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,GAAE,WAAgB,GAAG,YAAY;IAyIhE,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,11 @@
1
+ import { MemoryCache } from "../cache/index.js";
2
+ import type { Adapter, RouterConfig } from "../types.js";
3
+ /** Per-router cache + lazily created adapters. */
4
+ export declare class RouterState {
5
+ readonly config: RouterConfig;
6
+ readonly cache: MemoryCache;
7
+ readonly adapters: Map<string, Adapter>;
8
+ constructor(config: RouterConfig);
9
+ getAdapter(provider: string): Adapter;
10
+ }
11
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/router/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD,kDAAkD;AAClD,qBAAa,WAAW;IAIV,QAAQ,CAAC,MAAM,EAAE,YAAY;IAHzC,QAAQ,CAAC,KAAK,cAAqB;IACnC,QAAQ,CAAC,QAAQ,uBAA8B;gBAE1B,MAAM,EAAE,YAAY;IAEzC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAYtC"}
@@ -0,0 +1,30 @@
1
+ import type { CallOptions, CompleteArg, CompleteResult, ExtractInput, ExtractResult, InferSchemaOutput, Message, ModelRef, ProviderName, StreamHandle, ToolDefinition } from "../types.js";
2
+ export interface Router<R extends string = string> {
3
+ /** Retries the same provider (`retry.attempts`) before failing over to the next model. */
4
+ complete(input: CompleteArg, options?: CallOptions): Promise<CompleteResult>;
5
+ /** Infer output type from schema; override with `T` if needed. */
6
+ extract<S, T = InferSchemaOutput<S>>(input: ExtractInput<S>, options?: CallOptions): Promise<ExtractResult<T>>;
7
+ /**
8
+ * Unlike `complete()`, one try per model — no same-provider retry. Fails over to the next
9
+ * model only while the ~40-char pre-flush buffer hasn't been sent to the caller yet; once
10
+ * text has been emitted, a mid-stream failure ends the stream instead (a retry can't un-send
11
+ * text already yielded). See the fallback guide's "Streaming vs complete()" section.
12
+ */
13
+ stream(input: CompleteArg, options?: CallOptions): StreamHandle;
14
+ route(name: R): Router<R>;
15
+ }
16
+ export interface ParsedModel {
17
+ provider: ProviderName | string;
18
+ model: string;
19
+ ref: ModelRef;
20
+ }
21
+ /** Resolved options + messages for a call. */
22
+ export interface PreparedCall {
23
+ options: CallOptions;
24
+ modelChain: string[];
25
+ messages: Message[];
26
+ temperature?: number;
27
+ maxTokens?: number;
28
+ tools?: ToolDefinition[];
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/router/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC/C,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7E,kEAAkE;IAClE,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,EACjC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAChE,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC;CACf;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B"}
@@ -0,0 +1,5 @@
1
+ /** Public barrel — implementation is in `./router/`. */
2
+ export { createRouter } from "./router/create-router.js";
3
+ export { parseModelRef } from "./router/model-ref.js";
4
+ export type { ParsedModel, Router } from "./router/types.js";
5
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}