@happyvertical/ai 0.111.2 → 0.111.4

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 (69) hide show
  1. package/README.md +60 -0
  2. package/dist/chunks/{anthropic-DQjBd3wu.js → anthropic-BXiE495e.js} +94 -20
  3. package/dist/chunks/anthropic-BXiE495e.js.map +1 -0
  4. package/dist/chunks/{bedrock-gtE6OU5Z.js → bedrock-fO9ix2hd.js} +37 -16
  5. package/dist/chunks/bedrock-fO9ix2hd.js.map +1 -0
  6. package/dist/chunks/{bifrost-B0191CPM.js → bifrost-CrLHqZQJ.js} +4 -4
  7. package/dist/chunks/{bifrost-B0191CPM.js.map → bifrost-CrLHqZQJ.js.map} +1 -1
  8. package/dist/chunks/{byteplus-modelark-C0rRxYwh.js → byteplus-modelark-CM0-yuF3.js} +3 -3
  9. package/dist/chunks/{byteplus-modelark-C0rRxYwh.js.map → byteplus-modelark-CM0-yuF3.js.map} +1 -1
  10. package/dist/chunks/cache-hint-BdVY0hrJ.js +39 -0
  11. package/dist/chunks/cache-hint-BdVY0hrJ.js.map +1 -0
  12. package/dist/chunks/{claude-cli-DysSNpKY.js → claude-cli-CD1quA61.js} +3 -3
  13. package/dist/chunks/{claude-cli-DysSNpKY.js.map → claude-cli-CD1quA61.js.map} +1 -1
  14. package/dist/chunks/{continuation-B-b0Iqgj.js → continuation-Dgw5Zujl.js} +10 -3
  15. package/dist/chunks/continuation-Dgw5Zujl.js.map +1 -0
  16. package/dist/chunks/{gateway-audio-models-57sR3hHE.js → gateway-audio-models-Cs7vu956.js} +2 -2
  17. package/dist/chunks/{gateway-audio-models-57sR3hHE.js.map → gateway-audio-models-Cs7vu956.js.map} +1 -1
  18. package/dist/chunks/{gemini-BHdv492T.js → gemini-DjUpgpM1.js} +3 -3
  19. package/dist/chunks/{gemini-BHdv492T.js.map → gemini-DjUpgpM1.js.map} +1 -1
  20. package/dist/chunks/{huggingface-vooWYknE.js → huggingface-C8P7DPFD.js} +3 -3
  21. package/dist/chunks/{huggingface-vooWYknE.js.map → huggingface-C8P7DPFD.js.map} +1 -1
  22. package/dist/chunks/{laya-B7aCsYqu.js → laya-DuRRHJHo.js} +3 -3
  23. package/dist/chunks/{laya-B7aCsYqu.js.map → laya-DuRRHJHo.js.map} +1 -1
  24. package/dist/chunks/{litellm-Bhns6CSh.js → litellm-Cc6xC6sj.js} +4 -4
  25. package/dist/chunks/{litellm-Bhns6CSh.js.map → litellm-Cc6xC6sj.js.map} +1 -1
  26. package/dist/chunks/{ollama-pL2WCpkS.js → ollama-D5dILl5b.js} +8 -5
  27. package/dist/chunks/ollama-D5dILl5b.js.map +1 -0
  28. package/dist/chunks/{openai-compat-video-BoLwWXJM.js → openai-compat-video-DMu4hsI5.js} +3 -3
  29. package/dist/chunks/{openai-compat-video-BoLwWXJM.js.map → openai-compat-video-DMu4hsI5.js.map} +1 -1
  30. package/dist/chunks/{qwen-tts-BbGkn1oW.js → qwen-tts-dvbQnMSK.js} +2 -2
  31. package/dist/chunks/{qwen-tts-BbGkn1oW.js.map → qwen-tts-dvbQnMSK.js.map} +1 -1
  32. package/dist/chunks/{rate-limit-B3Kz6v4j.js → rate-limit-B9BFC8ld.js} +2 -2
  33. package/dist/chunks/{rate-limit-B3Kz6v4j.js.map → rate-limit-B9BFC8ld.js.map} +1 -1
  34. package/dist/chunks/{seevio-Dt8kWgpg.js → seevio-BnmiByK2.js} +3 -3
  35. package/dist/chunks/{seevio-Dt8kWgpg.js.map → seevio-BnmiByK2.js.map} +1 -1
  36. package/dist/chunks/{src-CWFnwztw.js → src-EMvAiwjJ.js} +115 -46
  37. package/dist/chunks/src-EMvAiwjJ.js.map +1 -0
  38. package/dist/chunks/{typesafe-DDVSVUR_.js → typesafe-d5Jwafs7.js} +3 -3
  39. package/dist/chunks/{typesafe-DDVSVUR_.js.map → typesafe-d5Jwafs7.js.map} +1 -1
  40. package/dist/chunks/{usage-yIT5lpQm.js → usage-B40bJZ49.js} +86 -3
  41. package/dist/chunks/usage-B40bJZ49.js.map +1 -0
  42. package/dist/chunks/{webllm-DrwR5V-y.js → webllm-Cp4aHmyG.js} +2 -2
  43. package/dist/chunks/{webllm-DrwR5V-y.js.map → webllm-Cp4aHmyG.js.map} +1 -1
  44. package/dist/index.js +2 -2
  45. package/dist/local.js +2 -2
  46. package/dist/node.js +3 -3
  47. package/dist/shared/cache-hint.d.ts +26 -0
  48. package/dist/shared/cache-hint.d.ts.map +1 -0
  49. package/dist/shared/claude-models.d.ts +29 -0
  50. package/dist/shared/claude-models.d.ts.map +1 -0
  51. package/dist/shared/continuation.d.ts.map +1 -1
  52. package/dist/shared/providers/anthropic.d.ts +5 -0
  53. package/dist/shared/providers/anthropic.d.ts.map +1 -1
  54. package/dist/shared/providers/bedrock.d.ts.map +1 -1
  55. package/dist/shared/providers/ollama.d.ts.map +1 -1
  56. package/dist/shared/providers/openai.d.ts +14 -0
  57. package/dist/shared/providers/openai.d.ts.map +1 -1
  58. package/dist/shared/providers/usage.d.ts +5 -0
  59. package/dist/shared/providers/usage.d.ts.map +1 -1
  60. package/dist/shared/safety.d.ts.map +1 -1
  61. package/dist/shared/types.d.ts +87 -3
  62. package/dist/shared/types.d.ts.map +1 -1
  63. package/package.json +2 -2
  64. package/dist/chunks/anthropic-DQjBd3wu.js.map +0 -1
  65. package/dist/chunks/bedrock-gtE6OU5Z.js.map +0 -1
  66. package/dist/chunks/continuation-B-b0Iqgj.js.map +0 -1
  67. package/dist/chunks/ollama-pL2WCpkS.js.map +0 -1
  68. package/dist/chunks/src-CWFnwztw.js.map +0 -1
  69. package/dist/chunks/usage-yIT5lpQm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webllm-DrwR5V-y.js","names":[],"sources":["../../src/shared/providers/webllm.ts"],"sourcesContent":["// biome-ignore-all lint/style/useNamingConvention: WebLLM's OpenAI-shaped wire format and model records are snake_case.\n/**\n * WebLLM provider: runs a chat model entirely in the browser on WebGPU.\n *\n * Backed by `@mlc-ai/web-llm`, an optional peer dependency that is imported\n * lazily on first use, so neither the root entry nor `getAI()` for other\n * provider types ever loads it. Reachable through `getAI({ type: 'webllm' })`\n * and the `@happyvertical/ai/local` subpath.\n *\n * WebLLM's engine API is OpenAI-shaped, so requests and responses map almost\n * one to one. Structured output (`responseSchema`) becomes WebLLM's\n * grammar-constrained `response_format`, which keeps a small model from\n * emitting a value outside the schema.\n */\n\nimport {\n normalizeBaseAIOptions,\n normalizeChatOptions,\n type PreparedRequestControls,\n prepareRequestControls,\n} from '../safety';\nimport type {\n AICapabilities,\n AIInterface,\n AIMessage,\n AIModel,\n AIResponse,\n AIToolCall,\n ChatOptions,\n CompletionOptions,\n EmbeddingOptions,\n EmbeddingResponse,\n ImageDescriptionOptions,\n ImageEmbeddingOptions,\n ImageGenerationOptions,\n ImageGenerationResponse,\n MessageOptions,\n TokenUsage,\n TTSOptions,\n TTSResponse,\n VideoGenerationJob,\n VideoGenerationOptions,\n VideoGenerationResult,\n VideoGenerationStatusResult,\n Voice,\n VoiceCloneOptions,\n VoiceDesignOptions,\n VoiceListOptions,\n WebLLMEngineLike,\n WebLLMLoadProgress,\n WebLLMOptions,\n} from '../types';\nimport {\n AIError,\n ContextLengthError,\n extractTextContent,\n ModelNotFoundError,\n WebGPUUnavailableError,\n WebLLMPeerMissingError,\n} from '../types';\nimport { emitUsage } from './usage';\n\nconst PROVIDER = 'webllm';\n\n/** Small enough for most GPUs (about 0.9 GB of VRAM); override with `defaultModel`. */\nexport const DEFAULT_WEBLLM_MODEL = 'Llama-3.2-1B-Instruct-q4f16_1-MLC';\n\n/** Context window assumed when a model record does not declare one. */\nconst DEFAULT_CONTEXT_LENGTH = 4096;\n\nconst WEBLLM_CAPABILITIES: AICapabilities = {\n chat: true,\n completion: true,\n embeddings: false,\n streaming: true,\n functions: true,\n vision: false,\n fineTuning: false,\n imageEmbeddings: false,\n imageGeneration: false,\n videoGeneration: false,\n tts: false,\n voiceCloning: false,\n voiceDesign: false,\n maxContextLength: DEFAULT_CONTEXT_LENGTH,\n supportedOperations: ['chat', 'completion', 'streaming', 'functions'],\n};\n\n/** Structural subset of the `@mlc-ai/web-llm` module this provider uses. */\ninterface WebLLMModule {\n CreateMLCEngine(\n model: string,\n config?: {\n appConfig?: unknown;\n initProgressCallback?: (report: WebLLMLoadProgress) => void;\n },\n ): Promise<WebLLMEngineLike>;\n prebuiltAppConfig: { model_list: WebLLMModelRecord[] };\n functionCallingModelIds?: string[];\n}\n\ninterface WebLLMModelRecord {\n model_id: string;\n vram_required_MB?: number;\n low_resource_required?: boolean;\n /** WebLLM `ModelType`: 0 or absent = LLM, 1 = embedding, 2 = VLM. */\n model_type?: number;\n overrides?: { context_window_size?: number };\n}\n\ninterface EngineEntry {\n promise: Promise<WebLLMEngineLike>;\n listeners: Set<(report: WebLLMLoadProgress) => void>;\n}\n\n/**\n * Per-engine request queues. WebLLM runs one generation at a time per engine\n * and `interruptGenerate()` stops whichever one is running, so requests are\n * serialized here and only the running request may interrupt.\n */\nconst engineQueues = new WeakMap<object, Promise<void>>();\n\n/** Engines shared by every provider instance that uses the prebuilt model list. */\nconst sharedEngines = new Map<string, EngineEntry>();\n\n/**\n * Imports the optional peer. Isolated so a missing install becomes a typed\n * {@link WebLLMPeerMissingError} instead of a bare module-resolution failure.\n */\nexport async function importWebLLM(): Promise<WebLLMModule> {\n try {\n const loaded = (await import('@mlc-ai/web-llm')) as unknown as\n | (WebLLMModule & { default?: WebLLMModule })\n | undefined;\n const module =\n typeof loaded?.CreateMLCEngine === 'function' ? loaded : loaded?.default;\n if (typeof module?.CreateMLCEngine !== 'function') {\n throw new Error('@mlc-ai/web-llm did not export CreateMLCEngine');\n }\n return module;\n } catch (error) {\n throw new WebLLMPeerMissingError(error);\n }\n}\n\n/** True when this runtime exposes WebGPU (`navigator.gpu`). */\nexport function isWebGPUAvailable(): boolean {\n const nav = (globalThis as { navigator?: { gpu?: unknown } }).navigator;\n return Boolean(nav?.gpu);\n}\n\n/**\n * Unloads every engine this module created and forgets them. Caller-supplied\n * engines are never touched.\n */\nexport async function disposeWebLLMEngines(): Promise<void> {\n const entries = [...sharedEngines.values()];\n sharedEngines.clear();\n await Promise.allSettled(\n entries.map(async (entry) => (await entry.promise).unload?.()),\n );\n}\n\nfunction unsupported(feature: string): never {\n throw new AIError(\n `${feature} is not supported by the webllm provider.`,\n 'NOT_SUPPORTED',\n PROVIDER,\n );\n}\n\nfunction stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n\n/**\n * In-browser chat provider on WebLLM (WebGPU). See the module header.\n */\nexport class WebLLMProvider implements AIInterface {\n private options: WebLLMOptions;\n /** Model the caller named, if any; a supplied engine is loaded with it already. */\n private readonly explicitModel?: string;\n private factoryEngine?: Promise<WebLLMEngineLike>;\n private readonly localEngines = new Map<string, EngineEntry>();\n\n constructor(options: WebLLMOptions) {\n this.explicitModel = options.defaultModel ?? options.model;\n this.options = normalizeBaseAIOptions({\n ...options,\n defaultModel: this.explicitModel ?? DEFAULT_WEBLLM_MODEL,\n });\n }\n\n // --------------------------------------------------------------------------\n // Engine lifecycle\n // --------------------------------------------------------------------------\n\n private async acquireEngine(\n model: string,\n signal?: AbortSignal,\n ): Promise<WebLLMEngineLike> {\n const supplied = this.options.engine;\n if (supplied) {\n if (typeof supplied !== 'function') return supplied;\n this.factoryEngine ??= supplied().catch((error) => {\n this.factoryEngine = undefined;\n throw error;\n });\n return abortable(this.factoryEngine, signal);\n }\n\n if (!isWebGPUAvailable()) {\n throw new WebGPUUnavailableError(PROVIDER);\n }\n\n // A custom appConfig changes what a model id means, so it must not share\n // an engine with other callers.\n const cache = this.options.appConfig ? this.localEngines : sharedEngines;\n let entry = cache.get(model);\n if (!entry) {\n const listeners = new Set<(report: WebLLMLoadProgress) => void>();\n const created: EngineEntry = {\n listeners,\n promise: this.createEngine(model, listeners),\n };\n created.promise.catch(() => {\n if (cache.get(model) === created) cache.delete(model);\n });\n cache.set(model, created);\n entry = created;\n }\n\n const onProgress = this.options.onLoadProgress;\n if (onProgress) entry.listeners.add(onProgress);\n try {\n return await abortable(entry.promise, signal);\n } finally {\n if (onProgress) entry.listeners.delete(onProgress);\n }\n }\n\n private async createEngine(\n model: string,\n listeners: Set<(report: WebLLMLoadProgress) => void>,\n ): Promise<WebLLMEngineLike> {\n const webllm = await importWebLLM();\n return webllm.CreateMLCEngine(model, {\n ...(this.options.appConfig ? { appConfig: this.options.appConfig } : {}),\n initProgressCallback: (report) => {\n for (const listener of listeners) {\n try {\n listener(report);\n } catch {\n // A progress listener must never break model loading.\n }\n }\n },\n });\n }\n\n // --------------------------------------------------------------------------\n // Request / response mapping\n // --------------------------------------------------------------------------\n\n private mapMessages(messages: AIMessage[]): Record<string, unknown>[] {\n return messages.map((message) => {\n if (message.role === 'user' && Array.isArray(message.content)) {\n return {\n role: 'user',\n content: message.content.map((part) =>\n part.type === 'text'\n ? { type: 'text', text: part.text }\n : { type: 'image_url', image_url: { url: part.image_url.url } },\n ),\n ...(message.name ? { name: message.name } : {}),\n };\n }\n const content = extractTextContent(message.content);\n if (message.role === 'tool' || message.role === 'function') {\n return {\n role: 'tool',\n content,\n tool_call_id: message.tool_call_id ?? message.name ?? '',\n };\n }\n if (message.role === 'assistant') {\n return stripUndefined({\n role: 'assistant',\n content: content || (message.tool_calls?.length ? null : ''),\n tool_calls: message.tool_calls?.map((call) => ({\n id: call.id,\n type: call.type,\n function: {\n name: call.function.name,\n arguments: call.function.arguments,\n },\n })),\n });\n }\n return {\n role: message.role,\n content,\n ...(message.name ? { name: message.name } : {}),\n };\n });\n }\n\n private mapResponseFormat(\n options: Pick<ChatOptions, 'responseFormat' | 'responseSchema'>,\n ): Record<string, unknown> | undefined {\n if (options.responseSchema !== undefined) {\n const schema =\n typeof options.responseSchema === 'string'\n ? options.responseSchema\n : JSON.stringify(options.responseSchema);\n // WebLLM compiles the schema to a grammar and masks logits, so the\n // output cannot leave it.\n return { type: 'json_object', schema };\n }\n return options.responseFormat?.type === 'json_object'\n ? { type: 'json_object' }\n : undefined;\n }\n\n private buildRequest(\n messages: AIMessage[],\n options: ChatOptions & { maxTokens: number },\n model: string | undefined,\n stream: boolean,\n includeTools: boolean,\n ): Record<string, unknown> {\n const tools =\n includeTools && options.tools?.length\n ? options.tools.map((tool) => ({\n type: 'function' as const,\n function: {\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters,\n },\n }))\n : undefined;\n return stripUndefined({\n model,\n messages: this.mapMessages(messages),\n max_tokens: options.maxTokens,\n temperature: options.temperature,\n top_p: options.topP,\n n: options.n,\n stop: options.stop,\n frequency_penalty: options.frequencyPenalty,\n presence_penalty: options.presencePenalty,\n seed: options.seed,\n tools,\n tool_choice: tools ? options.toolChoice : undefined,\n response_format: this.mapResponseFormat(options),\n stream,\n stream_options: stream ? { include_usage: true } : undefined,\n });\n }\n\n /** Model id to send. A caller-supplied engine already has its model loaded. */\n private requestModel(\n model: string,\n options: ChatOptions,\n ): string | undefined {\n if (!this.options.engine) return model;\n return options.model ?? this.explicitModel;\n }\n\n private mapUsage(usage: unknown): TokenUsage | undefined {\n const raw = usage as\n | {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n }\n | undefined\n | null;\n if (!raw) return undefined;\n return {\n promptTokens: raw.prompt_tokens ?? 0,\n completionTokens: raw.completion_tokens ?? 0,\n totalTokens: raw.total_tokens ?? 0,\n };\n }\n\n private mapFinishReason(reason: string | null | undefined) {\n switch (reason) {\n case 'length':\n return 'length' as const;\n case 'tool_calls':\n return 'tool_calls' as const;\n default:\n return 'stop' as const;\n }\n }\n\n /**\n * WebLLM reports `abort` when generation was interrupted. The provider's own\n * aborts are raised before this point, so reaching it means someone else\n * interrupted the engine (for example a caller sharing a supplied engine);\n * a truncated reply must not look like a normal stop.\n */\n private assertNotInterrupted(\n reason: string | null | undefined,\n model: string,\n ): void {\n if (reason === 'abort') {\n throw new AIError(\n 'Generation was interrupted before it finished',\n 'AI_INTERRUPTED',\n PROVIDER,\n model,\n true,\n );\n }\n }\n\n private mapError(error: unknown, model?: string): AIError {\n if (error instanceof AIError) return error;\n const name = (error as { name?: string } | undefined)?.name ?? '';\n const message = error instanceof Error ? error.message : String(error);\n if (name === 'WebGPUNotAvailableError' || name === 'WebGPUNotFoundError') {\n return new WebGPUUnavailableError(PROVIDER, message);\n }\n if (\n name === 'ContextWindowSizeExceededError' ||\n name === 'PrefillChunkSizeSmallerThanImageError'\n ) {\n return new ContextLengthError(PROVIDER, model);\n }\n if (\n name === 'ModelNotFoundError' ||\n name === 'SpecifiedModelNotFoundError' ||\n name === 'UnsupportedModelIdError' ||\n name === 'ModelNotLoadedError'\n ) {\n return new ModelNotFoundError(model ?? message, PROVIDER);\n }\n const mapped = new AIError(\n message,\n name === 'DeviceLostError' ? 'WEBGPU_DEVICE_LOST' : 'API_ERROR',\n PROVIDER,\n model,\n );\n mapped.cause = error;\n return mapped;\n }\n\n /** Throws the right AI error when the request ended by timeout or caller abort. */\n private abortError(\n controls: PreparedRequestControls | undefined,\n options: ChatOptions,\n model?: string,\n ): AIError | undefined {\n if (controls?.didTimeout()) {\n return new AIError(\n `AI request timed out after ${controls.timeout}ms`,\n 'AI_TIMEOUT',\n PROVIDER,\n model,\n );\n }\n if (options.signal?.aborted) {\n return new AIError(\n 'AI request aborted by caller',\n 'AI_ABORTED',\n PROVIDER,\n model,\n );\n }\n return undefined;\n }\n\n /**\n * Waits for this request's turn on the engine; resolves to a release fn. A\n * queued request that is aborted or times out leaves the queue at once and\n * never interrupts the generation ahead of it.\n */\n private async lockEngine(\n engine: WebLLMEngineLike,\n signal: AbortSignal,\n ): Promise<() => void> {\n const previous = engineQueues.get(engine) ?? Promise.resolve();\n let release: () => void = () => {};\n const mine = new Promise<void>((resolve) => {\n release = resolve;\n });\n engineQueues.set(\n engine,\n previous.then(() => mine),\n );\n try {\n await abortable(previous, signal);\n } catch (error) {\n release();\n throw error;\n }\n return release;\n }\n\n /** Interrupts generation when the composed signal fires; returns a detach fn. */\n private bindInterrupt(\n engine: WebLLMEngineLike,\n signal: AbortSignal,\n ): () => void {\n const interrupt = () => {\n try {\n void Promise.resolve(engine.interruptGenerate()).catch(() => {});\n } catch {\n // Best effort: the request is already being abandoned.\n }\n };\n if (signal.aborted) interrupt();\n signal.addEventListener('abort', interrupt, { once: true });\n return () => signal.removeEventListener('abort', interrupt);\n }\n\n // --------------------------------------------------------------------------\n // Chat\n // --------------------------------------------------------------------------\n\n async chat(\n messages: AIMessage[],\n options: ChatOptions = {},\n ): Promise<AIResponse> {\n const startTime = Date.now();\n let controls: PreparedRequestControls | undefined;\n let detach: (() => void) | undefined;\n let release: (() => void) | undefined;\n let pending: Promise<any> | undefined;\n let holdRelease: (() => Promise<unknown> | undefined) | undefined;\n const model =\n options.model || this.options.defaultModel || DEFAULT_WEBLLM_MODEL;\n try {\n options = normalizeChatOptions(this.options, options, PROVIDER, model);\n // Load before arming the request timeout: a multi-GB download must not\n // consume the generation budget.\n const engine = await this.acquireEngine(model, options.signal);\n controls = prepareRequestControls(this.options, options);\n release = await this.lockEngine(engine, controls.signal);\n detach = this.bindInterrupt(engine, controls.signal);\n\n pending = engine.chat.completions.create(\n this.buildRequest(\n messages,\n options as ChatOptions & { maxTokens: number },\n this.requestModel(model, options),\n false,\n true,\n ),\n );\n const started: Promise<unknown> = pending;\n let settled = false;\n const markSettled = () => {\n settled = true;\n };\n started.then(markSettled, markSettled);\n holdRelease = () => (settled ? undefined : started);\n const response = await abortable(pending, controls.signal);\n if (controls.signal.aborted) {\n throw (\n this.abortError(controls, options, model) ?? controls.signal.reason\n );\n }\n\n const choice = response?.choices?.[0];\n this.assertNotInterrupted(choice?.finish_reason, model);\n if (!choice) {\n throw new AIError(\n 'No choices returned from webllm',\n 'NO_CHOICES',\n PROVIDER,\n );\n }\n const usage = this.mapUsage(response.usage);\n emitUsage(\n this.options,\n PROVIDER,\n 'chat',\n response.model || model,\n usage,\n startTime,\n options.usageTags,\n );\n const toolCalls: AIToolCall[] | undefined =\n choice.message?.tool_calls?.map(\n (call: {\n id: string;\n function: { name: string; arguments: string };\n }) => ({\n id: call.id,\n type: 'function' as const,\n function: {\n name: call.function.name,\n arguments: call.function.arguments,\n },\n }),\n );\n return {\n content: choice.message?.content || '',\n usage,\n model: response.model || model,\n finishReason: this.mapFinishReason(choice.finish_reason),\n ...(toolCalls?.length ? { toolCalls } : {}),\n };\n } catch (error) {\n throw (\n this.abortError(controls, options, model) ?? this.mapError(error, model)\n );\n } finally {\n detach?.();\n releaseWhenIdle(release, holdRelease?.());\n controls?.cleanup();\n }\n }\n\n async complete(\n prompt: string,\n options: CompletionOptions = {},\n ): Promise<AIResponse> {\n return this.chat([{ role: 'user', content: prompt }], {\n model: options.model,\n maxTokens: options.maxTokens,\n temperature: options.temperature,\n topP: options.topP,\n n: options.n,\n stop: options.stop,\n stream: options.stream,\n onProgress: options.onProgress,\n signal: options.signal,\n timeout: options.timeout,\n reasoning: options.reasoning,\n usageTags: options.usageTags,\n continueOnLength: options.continueOnLength,\n });\n }\n\n async message(text: string, options: MessageOptions = {}): Promise<string> {\n const messages: AIMessage[] = [\n ...(options.history || []),\n { role: options.role || 'user', content: text },\n ];\n const response = await this.chat(messages, {\n model: options.model,\n maxTokens: options.maxTokens,\n temperature: options.temperature,\n topP: options.topP,\n stop: options.stop,\n stream: options.stream,\n frequencyPenalty: options.frequencyPenalty,\n presencePenalty: options.presencePenalty,\n responseFormat: options.responseFormat,\n responseSchema: options.responseSchema,\n seed: options.seed,\n tools: options.tools,\n toolChoice: options.toolChoice,\n onProgress: options.onProgress,\n signal: options.signal,\n timeout: options.timeout,\n reasoning: options.reasoning,\n usageTags: options.usageTags,\n continueOnLength: options.continueOnLength,\n });\n return response.content;\n }\n\n /**\n * Streams a chat completion as text chunks. Like the other providers, a\n * stream yields text only; use `chat()` for rounds that may call tools.\n * Breaking out of the loop interrupts generation on the engine.\n */\n async *stream(\n messages: AIMessage[],\n options: ChatOptions = {},\n ): AsyncIterable<string> {\n const startTime = Date.now();\n let controls: PreparedRequestControls | undefined;\n let detach: (() => void) | undefined;\n let engine: WebLLMEngineLike | undefined;\n let release: (() => void) | undefined;\n let iterator: AsyncIterator<WebLLMChunk> | undefined;\n let iteratorDone = false;\n let holdRelease: Promise<unknown> | undefined;\n const model =\n options.model || this.options.defaultModel || DEFAULT_WEBLLM_MODEL;\n try {\n options = normalizeChatOptions(this.options, options, PROVIDER, model);\n engine = await this.acquireEngine(model, options.signal);\n controls = prepareRequestControls(this.options, options);\n release = await this.lockEngine(engine, controls.signal);\n detach = this.bindInterrupt(engine, controls.signal);\n\n const pending: Promise<AsyncIterable<WebLLMChunk>> =\n engine.chat.completions.create(\n this.buildRequest(\n messages,\n options as ChatOptions & { maxTokens: number },\n this.requestModel(model, options),\n true,\n false,\n ),\n );\n let chunks: AsyncIterable<WebLLMChunk>;\n try {\n chunks = await abortable(pending, controls.signal);\n } catch (error) {\n // The caller is gone but the engine may still start this request.\n // Keep our queue closed until it has been interrupted and drained, or\n // the next request would wait behind it and could interrupt it.\n holdRelease = pending.then(\n (late) => abandonStream(late[Symbol.asyncIterator](), engine),\n () => {},\n );\n throw error;\n }\n // Iterated by hand: WebLLM releases its per-model lock only when its\n // generator runs to completion, never on an early `return()`.\n iterator = chunks[Symbol.asyncIterator]();\n\n let finishReason: string | null | undefined;\n let usage: TokenUsage | undefined;\n for (;;) {\n const step = await iterator.next();\n if (step.done) {\n iteratorDone = true;\n break;\n }\n const chunk = step.value;\n const choice = chunk.choices?.[0];\n finishReason = choice?.finish_reason ?? finishReason;\n if (chunk.usage) usage = this.mapUsage(chunk.usage);\n const content = choice?.delta?.content;\n if (content) {\n options.onProgress?.(content);\n yield content;\n }\n }\n if (controls.signal.aborted) {\n throw (\n this.abortError(controls, options, model) ?? controls.signal.reason\n );\n }\n this.assertNotInterrupted(finishReason, model);\n options.onFinishReason?.(this.mapFinishReason(finishReason));\n emitUsage(\n this.options,\n PROVIDER,\n 'stream',\n model,\n usage,\n startTime,\n options.usageTags,\n );\n } catch (error) {\n throw (\n this.abortError(controls, options, model) ?? this.mapError(error, model)\n );\n } finally {\n if (iterator && !iteratorDone && engine) {\n // Consumer stopped early (or the loop threw): stop the GPU, then let\n // the engine's generator finish so its lock is released before the\n // next request is admitted.\n try {\n void Promise.resolve(engine.interruptGenerate()).catch(() => {});\n } catch {\n // Best effort.\n }\n await drainIterator(iterator);\n }\n detach?.();\n releaseWhenIdle(release, holdRelease);\n controls?.cleanup();\n }\n }\n\n async countTokens(text: string): Promise<number> {\n // WebLLM exposes no standalone tokenizer; ~4 characters per token.\n return Math.ceil(text.length / 4);\n }\n\n // --------------------------------------------------------------------------\n // Models and capabilities\n // --------------------------------------------------------------------------\n\n async getModels(): Promise<AIModel[]> {\n const webllm = await importWebLLM();\n const list =\n (\n this.options.appConfig as\n | { model_list?: WebLLMModelRecord[] }\n | undefined\n )?.model_list ?? webllm.prebuiltAppConfig.model_list;\n const functionCalling = new Set(webllm.functionCallingModelIds ?? []);\n return list\n .filter((record) => record.model_type !== 1) // embedding models\n .map((record) => {\n const vision = record.model_type === 2;\n const functions = functionCalling.has(record.model_id);\n return {\n id: record.model_id,\n name: record.model_id,\n description: record.vram_required_MB\n ? `Runs on-device via WebGPU (~${Math.round(record.vram_required_MB)} MB VRAM)`\n : 'Runs on-device via WebGPU',\n contextLength:\n record.overrides?.context_window_size ?? DEFAULT_CONTEXT_LENGTH,\n capabilities: [\n 'text',\n 'chat',\n ...(functions ? ['functions'] : []),\n ...(vision ? ['vision'] : []),\n ],\n supportsFunctions: functions,\n supportsVision: vision,\n };\n });\n }\n\n async getCapabilities(): Promise<AICapabilities> {\n return { ...WEBLLM_CAPABILITIES };\n }\n\n // --------------------------------------------------------------------------\n // No in-browser equivalent\n // --------------------------------------------------------------------------\n\n async embed(\n _text: string | string[],\n _options: EmbeddingOptions = {},\n ): Promise<EmbeddingResponse> {\n return unsupported('Embeddings');\n }\n\n async embedImage(\n _image: string | Buffer,\n _options: ImageEmbeddingOptions = {},\n ): Promise<EmbeddingResponse> {\n return unsupported('Image embeddings');\n }\n\n async describeImage(\n _image: string | Buffer,\n _prompt?: string,\n _options: ImageDescriptionOptions = {},\n ): Promise<string> {\n return unsupported('Image description');\n }\n\n async generateImage(\n _prompt: string,\n _options: ImageGenerationOptions = {},\n ): Promise<ImageGenerationResponse> {\n return unsupported('Image generation');\n }\n\n async submitVideoGenerationJob(\n _options: VideoGenerationOptions,\n ): Promise<VideoGenerationJob> {\n return unsupported('Video generation');\n }\n\n async getVideoGenerationJob(\n _handle: VideoGenerationJob,\n ): Promise<VideoGenerationStatusResult> {\n return unsupported('Video generation');\n }\n\n async fetchVideoGenerationResult(\n _handle: VideoGenerationJob,\n ): Promise<VideoGenerationResult> {\n return unsupported('Video generation');\n }\n\n async cancelVideoGenerationJob(_handle: VideoGenerationJob): Promise<void> {\n return unsupported('Video generation');\n }\n\n async validateVideoGenerationAccess(): Promise<boolean> {\n return unsupported('Video generation');\n }\n\n async synthesizeSpeech(\n _text: string,\n _options?: TTSOptions,\n ): Promise<TTSResponse> {\n return unsupported('Text-to-speech');\n }\n\n streamSpeech(_text: string, _options?: TTSOptions): AsyncIterable<Buffer> {\n const error = new AIError(\n 'Text-to-speech streaming is not supported by the webllm provider.',\n 'NOT_SUPPORTED',\n PROVIDER,\n );\n return {\n [Symbol.asyncIterator]: () => ({\n next: () => Promise.reject(error),\n }),\n };\n }\n\n async cloneVoice(_options: VoiceCloneOptions): Promise<Voice> {\n return unsupported('Voice cloning');\n }\n\n async designVoice(_options: VoiceDesignOptions): Promise<Voice> {\n return unsupported('Voice design');\n }\n\n async getVoices(_options?: VoiceListOptions): Promise<Voice[]> {\n return unsupported('Voice listing');\n }\n}\n\n/** One streamed WebLLM chunk (structural subset). */\ninterface WebLLMChunk {\n choices?: Array<{\n delta?: { content?: string | null };\n finish_reason?: string | null;\n }>;\n usage?: unknown;\n}\n\n/** Runs a WebLLM stream to its end, ignoring errors; used after interrupting it. */\nasync function drainIterator(\n iterator: AsyncIterator<WebLLMChunk>,\n): Promise<void> {\n try {\n while (!(await iterator.next()).done) {\n // discard\n }\n } catch {\n // The engine already stopped; nothing more to release.\n }\n}\n\n/** Releases an engine queue slot now, or once `idle` has settled. */\nfunction releaseWhenIdle(\n release: (() => void) | undefined,\n idle?: Promise<unknown>,\n): void {\n if (!release) return;\n if (idle) void idle.then(release, release);\n else release();\n}\n\n/**\n * Finishes a stream nobody is reading. WebLLM resets its interrupt flag on the\n * first `next()`, so interrupt only after pulling one chunk, then drain it so\n * the engine's lock is released.\n */\nasync function abandonStream(\n iterator: AsyncIterator<WebLLMChunk>,\n engine: WebLLMEngineLike | undefined,\n): Promise<void> {\n try {\n if ((await iterator.next()).done) return;\n await Promise.resolve(engine?.interruptGenerate());\n } catch {\n return;\n }\n await drainIterator(iterator);\n}\n\n/** Rejects with the signal's reason if it fires first; the underlying work continues. */\nfunction abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n if (!signal) return promise;\n if (signal.aborted) {\n return Promise.reject(\n new AIError('AI request aborted by caller', 'AI_ABORTED', PROVIDER),\n );\n }\n return new Promise<T>((resolve, reject) => {\n const onAbort = () =>\n reject(\n new AIError('AI request aborted by caller', 'AI_ABORTED', PROVIDER),\n );\n signal.addEventListener('abort', onAbort, { once: true });\n promise.then(\n (value) => {\n signal.removeEventListener('abort', onAbort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener('abort', onAbort);\n reject(error);\n },\n );\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"webllm-Cp4aHmyG.js","names":[],"sources":["../../src/shared/providers/webllm.ts"],"sourcesContent":["// biome-ignore-all lint/style/useNamingConvention: WebLLM's OpenAI-shaped wire format and model records are snake_case.\n/**\n * WebLLM provider: runs a chat model entirely in the browser on WebGPU.\n *\n * Backed by `@mlc-ai/web-llm`, an optional peer dependency that is imported\n * lazily on first use, so neither the root entry nor `getAI()` for other\n * provider types ever loads it. Reachable through `getAI({ type: 'webllm' })`\n * and the `@happyvertical/ai/local` subpath.\n *\n * WebLLM's engine API is OpenAI-shaped, so requests and responses map almost\n * one to one. Structured output (`responseSchema`) becomes WebLLM's\n * grammar-constrained `response_format`, which keeps a small model from\n * emitting a value outside the schema.\n */\n\nimport {\n normalizeBaseAIOptions,\n normalizeChatOptions,\n type PreparedRequestControls,\n prepareRequestControls,\n} from '../safety';\nimport type {\n AICapabilities,\n AIInterface,\n AIMessage,\n AIModel,\n AIResponse,\n AIToolCall,\n ChatOptions,\n CompletionOptions,\n EmbeddingOptions,\n EmbeddingResponse,\n ImageDescriptionOptions,\n ImageEmbeddingOptions,\n ImageGenerationOptions,\n ImageGenerationResponse,\n MessageOptions,\n TokenUsage,\n TTSOptions,\n TTSResponse,\n VideoGenerationJob,\n VideoGenerationOptions,\n VideoGenerationResult,\n VideoGenerationStatusResult,\n Voice,\n VoiceCloneOptions,\n VoiceDesignOptions,\n VoiceListOptions,\n WebLLMEngineLike,\n WebLLMLoadProgress,\n WebLLMOptions,\n} from '../types';\nimport {\n AIError,\n ContextLengthError,\n extractTextContent,\n ModelNotFoundError,\n WebGPUUnavailableError,\n WebLLMPeerMissingError,\n} from '../types';\nimport { emitUsage } from './usage';\n\nconst PROVIDER = 'webllm';\n\n/** Small enough for most GPUs (about 0.9 GB of VRAM); override with `defaultModel`. */\nexport const DEFAULT_WEBLLM_MODEL = 'Llama-3.2-1B-Instruct-q4f16_1-MLC';\n\n/** Context window assumed when a model record does not declare one. */\nconst DEFAULT_CONTEXT_LENGTH = 4096;\n\nconst WEBLLM_CAPABILITIES: AICapabilities = {\n chat: true,\n completion: true,\n embeddings: false,\n streaming: true,\n functions: true,\n vision: false,\n fineTuning: false,\n imageEmbeddings: false,\n imageGeneration: false,\n videoGeneration: false,\n tts: false,\n voiceCloning: false,\n voiceDesign: false,\n maxContextLength: DEFAULT_CONTEXT_LENGTH,\n supportedOperations: ['chat', 'completion', 'streaming', 'functions'],\n};\n\n/** Structural subset of the `@mlc-ai/web-llm` module this provider uses. */\ninterface WebLLMModule {\n CreateMLCEngine(\n model: string,\n config?: {\n appConfig?: unknown;\n initProgressCallback?: (report: WebLLMLoadProgress) => void;\n },\n ): Promise<WebLLMEngineLike>;\n prebuiltAppConfig: { model_list: WebLLMModelRecord[] };\n functionCallingModelIds?: string[];\n}\n\ninterface WebLLMModelRecord {\n model_id: string;\n vram_required_MB?: number;\n low_resource_required?: boolean;\n /** WebLLM `ModelType`: 0 or absent = LLM, 1 = embedding, 2 = VLM. */\n model_type?: number;\n overrides?: { context_window_size?: number };\n}\n\ninterface EngineEntry {\n promise: Promise<WebLLMEngineLike>;\n listeners: Set<(report: WebLLMLoadProgress) => void>;\n}\n\n/**\n * Per-engine request queues. WebLLM runs one generation at a time per engine\n * and `interruptGenerate()` stops whichever one is running, so requests are\n * serialized here and only the running request may interrupt.\n */\nconst engineQueues = new WeakMap<object, Promise<void>>();\n\n/** Engines shared by every provider instance that uses the prebuilt model list. */\nconst sharedEngines = new Map<string, EngineEntry>();\n\n/**\n * Imports the optional peer. Isolated so a missing install becomes a typed\n * {@link WebLLMPeerMissingError} instead of a bare module-resolution failure.\n */\nexport async function importWebLLM(): Promise<WebLLMModule> {\n try {\n const loaded = (await import('@mlc-ai/web-llm')) as unknown as\n | (WebLLMModule & { default?: WebLLMModule })\n | undefined;\n const module =\n typeof loaded?.CreateMLCEngine === 'function' ? loaded : loaded?.default;\n if (typeof module?.CreateMLCEngine !== 'function') {\n throw new Error('@mlc-ai/web-llm did not export CreateMLCEngine');\n }\n return module;\n } catch (error) {\n throw new WebLLMPeerMissingError(error);\n }\n}\n\n/** True when this runtime exposes WebGPU (`navigator.gpu`). */\nexport function isWebGPUAvailable(): boolean {\n const nav = (globalThis as { navigator?: { gpu?: unknown } }).navigator;\n return Boolean(nav?.gpu);\n}\n\n/**\n * Unloads every engine this module created and forgets them. Caller-supplied\n * engines are never touched.\n */\nexport async function disposeWebLLMEngines(): Promise<void> {\n const entries = [...sharedEngines.values()];\n sharedEngines.clear();\n await Promise.allSettled(\n entries.map(async (entry) => (await entry.promise).unload?.()),\n );\n}\n\nfunction unsupported(feature: string): never {\n throw new AIError(\n `${feature} is not supported by the webllm provider.`,\n 'NOT_SUPPORTED',\n PROVIDER,\n );\n}\n\nfunction stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n\n/**\n * In-browser chat provider on WebLLM (WebGPU). See the module header.\n */\nexport class WebLLMProvider implements AIInterface {\n private options: WebLLMOptions;\n /** Model the caller named, if any; a supplied engine is loaded with it already. */\n private readonly explicitModel?: string;\n private factoryEngine?: Promise<WebLLMEngineLike>;\n private readonly localEngines = new Map<string, EngineEntry>();\n\n constructor(options: WebLLMOptions) {\n this.explicitModel = options.defaultModel ?? options.model;\n this.options = normalizeBaseAIOptions({\n ...options,\n defaultModel: this.explicitModel ?? DEFAULT_WEBLLM_MODEL,\n });\n }\n\n // --------------------------------------------------------------------------\n // Engine lifecycle\n // --------------------------------------------------------------------------\n\n private async acquireEngine(\n model: string,\n signal?: AbortSignal,\n ): Promise<WebLLMEngineLike> {\n const supplied = this.options.engine;\n if (supplied) {\n if (typeof supplied !== 'function') return supplied;\n this.factoryEngine ??= supplied().catch((error) => {\n this.factoryEngine = undefined;\n throw error;\n });\n return abortable(this.factoryEngine, signal);\n }\n\n if (!isWebGPUAvailable()) {\n throw new WebGPUUnavailableError(PROVIDER);\n }\n\n // A custom appConfig changes what a model id means, so it must not share\n // an engine with other callers.\n const cache = this.options.appConfig ? this.localEngines : sharedEngines;\n let entry = cache.get(model);\n if (!entry) {\n const listeners = new Set<(report: WebLLMLoadProgress) => void>();\n const created: EngineEntry = {\n listeners,\n promise: this.createEngine(model, listeners),\n };\n created.promise.catch(() => {\n if (cache.get(model) === created) cache.delete(model);\n });\n cache.set(model, created);\n entry = created;\n }\n\n const onProgress = this.options.onLoadProgress;\n if (onProgress) entry.listeners.add(onProgress);\n try {\n return await abortable(entry.promise, signal);\n } finally {\n if (onProgress) entry.listeners.delete(onProgress);\n }\n }\n\n private async createEngine(\n model: string,\n listeners: Set<(report: WebLLMLoadProgress) => void>,\n ): Promise<WebLLMEngineLike> {\n const webllm = await importWebLLM();\n return webllm.CreateMLCEngine(model, {\n ...(this.options.appConfig ? { appConfig: this.options.appConfig } : {}),\n initProgressCallback: (report) => {\n for (const listener of listeners) {\n try {\n listener(report);\n } catch {\n // A progress listener must never break model loading.\n }\n }\n },\n });\n }\n\n // --------------------------------------------------------------------------\n // Request / response mapping\n // --------------------------------------------------------------------------\n\n private mapMessages(messages: AIMessage[]): Record<string, unknown>[] {\n return messages.map((message) => {\n if (message.role === 'user' && Array.isArray(message.content)) {\n return {\n role: 'user',\n content: message.content.map((part) =>\n part.type === 'text'\n ? { type: 'text', text: part.text }\n : { type: 'image_url', image_url: { url: part.image_url.url } },\n ),\n ...(message.name ? { name: message.name } : {}),\n };\n }\n const content = extractTextContent(message.content);\n if (message.role === 'tool' || message.role === 'function') {\n return {\n role: 'tool',\n content,\n tool_call_id: message.tool_call_id ?? message.name ?? '',\n };\n }\n if (message.role === 'assistant') {\n return stripUndefined({\n role: 'assistant',\n content: content || (message.tool_calls?.length ? null : ''),\n tool_calls: message.tool_calls?.map((call) => ({\n id: call.id,\n type: call.type,\n function: {\n name: call.function.name,\n arguments: call.function.arguments,\n },\n })),\n });\n }\n return {\n role: message.role,\n content,\n ...(message.name ? { name: message.name } : {}),\n };\n });\n }\n\n private mapResponseFormat(\n options: Pick<ChatOptions, 'responseFormat' | 'responseSchema'>,\n ): Record<string, unknown> | undefined {\n if (options.responseSchema !== undefined) {\n const schema =\n typeof options.responseSchema === 'string'\n ? options.responseSchema\n : JSON.stringify(options.responseSchema);\n // WebLLM compiles the schema to a grammar and masks logits, so the\n // output cannot leave it.\n return { type: 'json_object', schema };\n }\n return options.responseFormat?.type === 'json_object'\n ? { type: 'json_object' }\n : undefined;\n }\n\n private buildRequest(\n messages: AIMessage[],\n options: ChatOptions & { maxTokens: number },\n model: string | undefined,\n stream: boolean,\n includeTools: boolean,\n ): Record<string, unknown> {\n const tools =\n includeTools && options.tools?.length\n ? options.tools.map((tool) => ({\n type: 'function' as const,\n function: {\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters,\n },\n }))\n : undefined;\n return stripUndefined({\n model,\n messages: this.mapMessages(messages),\n max_tokens: options.maxTokens,\n temperature: options.temperature,\n top_p: options.topP,\n n: options.n,\n stop: options.stop,\n frequency_penalty: options.frequencyPenalty,\n presence_penalty: options.presencePenalty,\n seed: options.seed,\n tools,\n tool_choice: tools ? options.toolChoice : undefined,\n response_format: this.mapResponseFormat(options),\n stream,\n stream_options: stream ? { include_usage: true } : undefined,\n });\n }\n\n /** Model id to send. A caller-supplied engine already has its model loaded. */\n private requestModel(\n model: string,\n options: ChatOptions,\n ): string | undefined {\n if (!this.options.engine) return model;\n return options.model ?? this.explicitModel;\n }\n\n private mapUsage(usage: unknown): TokenUsage | undefined {\n const raw = usage as\n | {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n }\n | undefined\n | null;\n if (!raw) return undefined;\n return {\n promptTokens: raw.prompt_tokens ?? 0,\n completionTokens: raw.completion_tokens ?? 0,\n totalTokens: raw.total_tokens ?? 0,\n };\n }\n\n private mapFinishReason(reason: string | null | undefined) {\n switch (reason) {\n case 'length':\n return 'length' as const;\n case 'tool_calls':\n return 'tool_calls' as const;\n default:\n return 'stop' as const;\n }\n }\n\n /**\n * WebLLM reports `abort` when generation was interrupted. The provider's own\n * aborts are raised before this point, so reaching it means someone else\n * interrupted the engine (for example a caller sharing a supplied engine);\n * a truncated reply must not look like a normal stop.\n */\n private assertNotInterrupted(\n reason: string | null | undefined,\n model: string,\n ): void {\n if (reason === 'abort') {\n throw new AIError(\n 'Generation was interrupted before it finished',\n 'AI_INTERRUPTED',\n PROVIDER,\n model,\n true,\n );\n }\n }\n\n private mapError(error: unknown, model?: string): AIError {\n if (error instanceof AIError) return error;\n const name = (error as { name?: string } | undefined)?.name ?? '';\n const message = error instanceof Error ? error.message : String(error);\n if (name === 'WebGPUNotAvailableError' || name === 'WebGPUNotFoundError') {\n return new WebGPUUnavailableError(PROVIDER, message);\n }\n if (\n name === 'ContextWindowSizeExceededError' ||\n name === 'PrefillChunkSizeSmallerThanImageError'\n ) {\n return new ContextLengthError(PROVIDER, model);\n }\n if (\n name === 'ModelNotFoundError' ||\n name === 'SpecifiedModelNotFoundError' ||\n name === 'UnsupportedModelIdError' ||\n name === 'ModelNotLoadedError'\n ) {\n return new ModelNotFoundError(model ?? message, PROVIDER);\n }\n const mapped = new AIError(\n message,\n name === 'DeviceLostError' ? 'WEBGPU_DEVICE_LOST' : 'API_ERROR',\n PROVIDER,\n model,\n );\n mapped.cause = error;\n return mapped;\n }\n\n /** Throws the right AI error when the request ended by timeout or caller abort. */\n private abortError(\n controls: PreparedRequestControls | undefined,\n options: ChatOptions,\n model?: string,\n ): AIError | undefined {\n if (controls?.didTimeout()) {\n return new AIError(\n `AI request timed out after ${controls.timeout}ms`,\n 'AI_TIMEOUT',\n PROVIDER,\n model,\n );\n }\n if (options.signal?.aborted) {\n return new AIError(\n 'AI request aborted by caller',\n 'AI_ABORTED',\n PROVIDER,\n model,\n );\n }\n return undefined;\n }\n\n /**\n * Waits for this request's turn on the engine; resolves to a release fn. A\n * queued request that is aborted or times out leaves the queue at once and\n * never interrupts the generation ahead of it.\n */\n private async lockEngine(\n engine: WebLLMEngineLike,\n signal: AbortSignal,\n ): Promise<() => void> {\n const previous = engineQueues.get(engine) ?? Promise.resolve();\n let release: () => void = () => {};\n const mine = new Promise<void>((resolve) => {\n release = resolve;\n });\n engineQueues.set(\n engine,\n previous.then(() => mine),\n );\n try {\n await abortable(previous, signal);\n } catch (error) {\n release();\n throw error;\n }\n return release;\n }\n\n /** Interrupts generation when the composed signal fires; returns a detach fn. */\n private bindInterrupt(\n engine: WebLLMEngineLike,\n signal: AbortSignal,\n ): () => void {\n const interrupt = () => {\n try {\n void Promise.resolve(engine.interruptGenerate()).catch(() => {});\n } catch {\n // Best effort: the request is already being abandoned.\n }\n };\n if (signal.aborted) interrupt();\n signal.addEventListener('abort', interrupt, { once: true });\n return () => signal.removeEventListener('abort', interrupt);\n }\n\n // --------------------------------------------------------------------------\n // Chat\n // --------------------------------------------------------------------------\n\n async chat(\n messages: AIMessage[],\n options: ChatOptions = {},\n ): Promise<AIResponse> {\n const startTime = Date.now();\n let controls: PreparedRequestControls | undefined;\n let detach: (() => void) | undefined;\n let release: (() => void) | undefined;\n let pending: Promise<any> | undefined;\n let holdRelease: (() => Promise<unknown> | undefined) | undefined;\n const model =\n options.model || this.options.defaultModel || DEFAULT_WEBLLM_MODEL;\n try {\n options = normalizeChatOptions(this.options, options, PROVIDER, model);\n // Load before arming the request timeout: a multi-GB download must not\n // consume the generation budget.\n const engine = await this.acquireEngine(model, options.signal);\n controls = prepareRequestControls(this.options, options);\n release = await this.lockEngine(engine, controls.signal);\n detach = this.bindInterrupt(engine, controls.signal);\n\n pending = engine.chat.completions.create(\n this.buildRequest(\n messages,\n options as ChatOptions & { maxTokens: number },\n this.requestModel(model, options),\n false,\n true,\n ),\n );\n const started: Promise<unknown> = pending;\n let settled = false;\n const markSettled = () => {\n settled = true;\n };\n started.then(markSettled, markSettled);\n holdRelease = () => (settled ? undefined : started);\n const response = await abortable(pending, controls.signal);\n if (controls.signal.aborted) {\n throw (\n this.abortError(controls, options, model) ?? controls.signal.reason\n );\n }\n\n const choice = response?.choices?.[0];\n this.assertNotInterrupted(choice?.finish_reason, model);\n if (!choice) {\n throw new AIError(\n 'No choices returned from webllm',\n 'NO_CHOICES',\n PROVIDER,\n );\n }\n const usage = this.mapUsage(response.usage);\n emitUsage(\n this.options,\n PROVIDER,\n 'chat',\n response.model || model,\n usage,\n startTime,\n options.usageTags,\n );\n const toolCalls: AIToolCall[] | undefined =\n choice.message?.tool_calls?.map(\n (call: {\n id: string;\n function: { name: string; arguments: string };\n }) => ({\n id: call.id,\n type: 'function' as const,\n function: {\n name: call.function.name,\n arguments: call.function.arguments,\n },\n }),\n );\n return {\n content: choice.message?.content || '',\n usage,\n model: response.model || model,\n finishReason: this.mapFinishReason(choice.finish_reason),\n ...(toolCalls?.length ? { toolCalls } : {}),\n };\n } catch (error) {\n throw (\n this.abortError(controls, options, model) ?? this.mapError(error, model)\n );\n } finally {\n detach?.();\n releaseWhenIdle(release, holdRelease?.());\n controls?.cleanup();\n }\n }\n\n async complete(\n prompt: string,\n options: CompletionOptions = {},\n ): Promise<AIResponse> {\n return this.chat([{ role: 'user', content: prompt }], {\n model: options.model,\n maxTokens: options.maxTokens,\n temperature: options.temperature,\n topP: options.topP,\n n: options.n,\n stop: options.stop,\n stream: options.stream,\n onProgress: options.onProgress,\n signal: options.signal,\n timeout: options.timeout,\n reasoning: options.reasoning,\n usageTags: options.usageTags,\n continueOnLength: options.continueOnLength,\n });\n }\n\n async message(text: string, options: MessageOptions = {}): Promise<string> {\n const messages: AIMessage[] = [\n ...(options.history || []),\n { role: options.role || 'user', content: text },\n ];\n const response = await this.chat(messages, {\n model: options.model,\n maxTokens: options.maxTokens,\n temperature: options.temperature,\n topP: options.topP,\n stop: options.stop,\n stream: options.stream,\n frequencyPenalty: options.frequencyPenalty,\n presencePenalty: options.presencePenalty,\n responseFormat: options.responseFormat,\n responseSchema: options.responseSchema,\n seed: options.seed,\n tools: options.tools,\n toolChoice: options.toolChoice,\n onProgress: options.onProgress,\n signal: options.signal,\n timeout: options.timeout,\n reasoning: options.reasoning,\n usageTags: options.usageTags,\n continueOnLength: options.continueOnLength,\n });\n return response.content;\n }\n\n /**\n * Streams a chat completion as text chunks. Like the other providers, a\n * stream yields text only; use `chat()` for rounds that may call tools.\n * Breaking out of the loop interrupts generation on the engine.\n */\n async *stream(\n messages: AIMessage[],\n options: ChatOptions = {},\n ): AsyncIterable<string> {\n const startTime = Date.now();\n let controls: PreparedRequestControls | undefined;\n let detach: (() => void) | undefined;\n let engine: WebLLMEngineLike | undefined;\n let release: (() => void) | undefined;\n let iterator: AsyncIterator<WebLLMChunk> | undefined;\n let iteratorDone = false;\n let holdRelease: Promise<unknown> | undefined;\n const model =\n options.model || this.options.defaultModel || DEFAULT_WEBLLM_MODEL;\n try {\n options = normalizeChatOptions(this.options, options, PROVIDER, model);\n engine = await this.acquireEngine(model, options.signal);\n controls = prepareRequestControls(this.options, options);\n release = await this.lockEngine(engine, controls.signal);\n detach = this.bindInterrupt(engine, controls.signal);\n\n const pending: Promise<AsyncIterable<WebLLMChunk>> =\n engine.chat.completions.create(\n this.buildRequest(\n messages,\n options as ChatOptions & { maxTokens: number },\n this.requestModel(model, options),\n true,\n false,\n ),\n );\n let chunks: AsyncIterable<WebLLMChunk>;\n try {\n chunks = await abortable(pending, controls.signal);\n } catch (error) {\n // The caller is gone but the engine may still start this request.\n // Keep our queue closed until it has been interrupted and drained, or\n // the next request would wait behind it and could interrupt it.\n holdRelease = pending.then(\n (late) => abandonStream(late[Symbol.asyncIterator](), engine),\n () => {},\n );\n throw error;\n }\n // Iterated by hand: WebLLM releases its per-model lock only when its\n // generator runs to completion, never on an early `return()`.\n iterator = chunks[Symbol.asyncIterator]();\n\n let finishReason: string | null | undefined;\n let usage: TokenUsage | undefined;\n for (;;) {\n const step = await iterator.next();\n if (step.done) {\n iteratorDone = true;\n break;\n }\n const chunk = step.value;\n const choice = chunk.choices?.[0];\n finishReason = choice?.finish_reason ?? finishReason;\n if (chunk.usage) usage = this.mapUsage(chunk.usage);\n const content = choice?.delta?.content;\n if (content) {\n options.onProgress?.(content);\n yield content;\n }\n }\n if (controls.signal.aborted) {\n throw (\n this.abortError(controls, options, model) ?? controls.signal.reason\n );\n }\n this.assertNotInterrupted(finishReason, model);\n options.onFinishReason?.(this.mapFinishReason(finishReason));\n emitUsage(\n this.options,\n PROVIDER,\n 'stream',\n model,\n usage,\n startTime,\n options.usageTags,\n );\n } catch (error) {\n throw (\n this.abortError(controls, options, model) ?? this.mapError(error, model)\n );\n } finally {\n if (iterator && !iteratorDone && engine) {\n // Consumer stopped early (or the loop threw): stop the GPU, then let\n // the engine's generator finish so its lock is released before the\n // next request is admitted.\n try {\n void Promise.resolve(engine.interruptGenerate()).catch(() => {});\n } catch {\n // Best effort.\n }\n await drainIterator(iterator);\n }\n detach?.();\n releaseWhenIdle(release, holdRelease);\n controls?.cleanup();\n }\n }\n\n async countTokens(text: string): Promise<number> {\n // WebLLM exposes no standalone tokenizer; ~4 characters per token.\n return Math.ceil(text.length / 4);\n }\n\n // --------------------------------------------------------------------------\n // Models and capabilities\n // --------------------------------------------------------------------------\n\n async getModels(): Promise<AIModel[]> {\n const webllm = await importWebLLM();\n const list =\n (\n this.options.appConfig as\n | { model_list?: WebLLMModelRecord[] }\n | undefined\n )?.model_list ?? webllm.prebuiltAppConfig.model_list;\n const functionCalling = new Set(webllm.functionCallingModelIds ?? []);\n return list\n .filter((record) => record.model_type !== 1) // embedding models\n .map((record) => {\n const vision = record.model_type === 2;\n const functions = functionCalling.has(record.model_id);\n return {\n id: record.model_id,\n name: record.model_id,\n description: record.vram_required_MB\n ? `Runs on-device via WebGPU (~${Math.round(record.vram_required_MB)} MB VRAM)`\n : 'Runs on-device via WebGPU',\n contextLength:\n record.overrides?.context_window_size ?? DEFAULT_CONTEXT_LENGTH,\n capabilities: [\n 'text',\n 'chat',\n ...(functions ? ['functions'] : []),\n ...(vision ? ['vision'] : []),\n ],\n supportsFunctions: functions,\n supportsVision: vision,\n };\n });\n }\n\n async getCapabilities(): Promise<AICapabilities> {\n return { ...WEBLLM_CAPABILITIES };\n }\n\n // --------------------------------------------------------------------------\n // No in-browser equivalent\n // --------------------------------------------------------------------------\n\n async embed(\n _text: string | string[],\n _options: EmbeddingOptions = {},\n ): Promise<EmbeddingResponse> {\n return unsupported('Embeddings');\n }\n\n async embedImage(\n _image: string | Buffer,\n _options: ImageEmbeddingOptions = {},\n ): Promise<EmbeddingResponse> {\n return unsupported('Image embeddings');\n }\n\n async describeImage(\n _image: string | Buffer,\n _prompt?: string,\n _options: ImageDescriptionOptions = {},\n ): Promise<string> {\n return unsupported('Image description');\n }\n\n async generateImage(\n _prompt: string,\n _options: ImageGenerationOptions = {},\n ): Promise<ImageGenerationResponse> {\n return unsupported('Image generation');\n }\n\n async submitVideoGenerationJob(\n _options: VideoGenerationOptions,\n ): Promise<VideoGenerationJob> {\n return unsupported('Video generation');\n }\n\n async getVideoGenerationJob(\n _handle: VideoGenerationJob,\n ): Promise<VideoGenerationStatusResult> {\n return unsupported('Video generation');\n }\n\n async fetchVideoGenerationResult(\n _handle: VideoGenerationJob,\n ): Promise<VideoGenerationResult> {\n return unsupported('Video generation');\n }\n\n async cancelVideoGenerationJob(_handle: VideoGenerationJob): Promise<void> {\n return unsupported('Video generation');\n }\n\n async validateVideoGenerationAccess(): Promise<boolean> {\n return unsupported('Video generation');\n }\n\n async synthesizeSpeech(\n _text: string,\n _options?: TTSOptions,\n ): Promise<TTSResponse> {\n return unsupported('Text-to-speech');\n }\n\n streamSpeech(_text: string, _options?: TTSOptions): AsyncIterable<Buffer> {\n const error = new AIError(\n 'Text-to-speech streaming is not supported by the webllm provider.',\n 'NOT_SUPPORTED',\n PROVIDER,\n );\n return {\n [Symbol.asyncIterator]: () => ({\n next: () => Promise.reject(error),\n }),\n };\n }\n\n async cloneVoice(_options: VoiceCloneOptions): Promise<Voice> {\n return unsupported('Voice cloning');\n }\n\n async designVoice(_options: VoiceDesignOptions): Promise<Voice> {\n return unsupported('Voice design');\n }\n\n async getVoices(_options?: VoiceListOptions): Promise<Voice[]> {\n return unsupported('Voice listing');\n }\n}\n\n/** One streamed WebLLM chunk (structural subset). */\ninterface WebLLMChunk {\n choices?: Array<{\n delta?: { content?: string | null };\n finish_reason?: string | null;\n }>;\n usage?: unknown;\n}\n\n/** Runs a WebLLM stream to its end, ignoring errors; used after interrupting it. */\nasync function drainIterator(\n iterator: AsyncIterator<WebLLMChunk>,\n): Promise<void> {\n try {\n while (!(await iterator.next()).done) {\n // discard\n }\n } catch {\n // The engine already stopped; nothing more to release.\n }\n}\n\n/** Releases an engine queue slot now, or once `idle` has settled. */\nfunction releaseWhenIdle(\n release: (() => void) | undefined,\n idle?: Promise<unknown>,\n): void {\n if (!release) return;\n if (idle) void idle.then(release, release);\n else release();\n}\n\n/**\n * Finishes a stream nobody is reading. WebLLM resets its interrupt flag on the\n * first `next()`, so interrupt only after pulling one chunk, then drain it so\n * the engine's lock is released.\n */\nasync function abandonStream(\n iterator: AsyncIterator<WebLLMChunk>,\n engine: WebLLMEngineLike | undefined,\n): Promise<void> {\n try {\n if ((await iterator.next()).done) return;\n await Promise.resolve(engine?.interruptGenerate());\n } catch {\n return;\n }\n await drainIterator(iterator);\n}\n\n/** Rejects with the signal's reason if it fires first; the underlying work continues. */\nfunction abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n if (!signal) return promise;\n if (signal.aborted) {\n return Promise.reject(\n new AIError('AI request aborted by caller', 'AI_ABORTED', PROVIDER),\n );\n }\n return new Promise<T>((resolve, reject) => {\n const onAbort = () =>\n reject(\n new AIError('AI request aborted by caller', 'AI_ABORTED', PROVIDER),\n );\n signal.addEventListener('abort', onAbort, { once: true });\n promise.then(\n (value) => {\n signal.removeEventListener('abort', onAbort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener('abort', onAbort);\n reject(error);\n },\n );\n });\n}\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { S as isRateLimitRetryableSoon, _ as ModelNotFoundError, a as DEFAULT_AI_TIMEOUT_MS, b as WebLLMPeerMissingError, d as AIError, f as AI_PROVIDER_TYPES, g as DEFAULT_RATE_LIMIT_MAX_RETRY_DELAY_MS, h as ContextLengthError, i as DEFAULT_AI_MAX_RETRIES, m as ContentFilterError, p as AuthenticationError, r as DEFAULT_AI_GENERATION_LIMITS, v as RateLimitError, x as extractTextContent, y as WebGPUUnavailableError } from "./chunks/usage-yIT5lpQm.js";
2
- import { a as ChatGPTPlanSessionRevokedError, c as ChatGPTPlanWorkspaceError, d as getAI, f as getAIAuto, g as getOpenAI, h as getAIClient, i as ChatGPTPlanProvider, l as AIMessage, m as OpenAIClient, n as AIThread, o as ChatGPTPlanUsageLimitError, p as AIClient, r as ChatGPTPlanError, s as ChatGPTPlanUsageUnavailableError, t as PACKAGE_VERSION_INITIALIZED } from "./chunks/src-CWFnwztw.js";
1
+ import { C as WebGPUUnavailableError, E as isRateLimitRetryableSoon, S as RateLimitError, T as extractTextContent, _ as AuthenticationError, a as DEFAULT_AI_MAX_RETRIES, b as DEFAULT_RATE_LIMIT_MAX_RETRY_DELAY_MS, g as AI_PROVIDER_TYPES, h as AIError, i as DEFAULT_AI_GENERATION_LIMITS, o as DEFAULT_AI_TIMEOUT_MS, v as ContentFilterError, w as WebLLMPeerMissingError, x as ModelNotFoundError, y as ContextLengthError } from "./chunks/usage-B40bJZ49.js";
2
+ import { a as ChatGPTPlanSessionRevokedError, c as ChatGPTPlanWorkspaceError, d as getAI, f as getAIAuto, g as getOpenAI, h as getAIClient, i as ChatGPTPlanProvider, l as AIMessage, m as OpenAIClient, n as AIThread, o as ChatGPTPlanUsageLimitError, p as AIClient, r as ChatGPTPlanError, s as ChatGPTPlanUsageUnavailableError, t as PACKAGE_VERSION_INITIALIZED } from "./chunks/src-EMvAiwjJ.js";
3
3
  export { AIClient, AIError, AIMessage as AIMessageClass, AIThread, AI_PROVIDER_TYPES, AuthenticationError, ChatGPTPlanError, ChatGPTPlanProvider, ChatGPTPlanSessionRevokedError, ChatGPTPlanUsageLimitError, ChatGPTPlanUsageUnavailableError, ChatGPTPlanWorkspaceError, ContentFilterError, ContextLengthError, DEFAULT_AI_GENERATION_LIMITS, DEFAULT_AI_MAX_RETRIES, DEFAULT_AI_TIMEOUT_MS, DEFAULT_RATE_LIMIT_MAX_RETRY_DELAY_MS, ModelNotFoundError, OpenAIClient, PACKAGE_VERSION_INITIALIZED, RateLimitError, WebGPUUnavailableError, WebLLMPeerMissingError, extractTextContent, getAI, getAIAuto, getAIClient, getOpenAI, isRateLimitRetryableSoon };
package/dist/local.js CHANGED
@@ -1,3 +1,3 @@
1
- import { b as WebLLMPeerMissingError, y as WebGPUUnavailableError } from "./chunks/usage-yIT5lpQm.js";
2
- import { a as isWebGPUAvailable, i as importWebLLM, n as WebLLMProvider, r as disposeWebLLMEngines, t as DEFAULT_WEBLLM_MODEL } from "./chunks/webllm-DrwR5V-y.js";
1
+ import { C as WebGPUUnavailableError, w as WebLLMPeerMissingError } from "./chunks/usage-B40bJZ49.js";
2
+ import { a as isWebGPUAvailable, i as importWebLLM, n as WebLLMProvider, r as disposeWebLLMEngines, t as DEFAULT_WEBLLM_MODEL } from "./chunks/webllm-Cp4aHmyG.js";
3
3
  export { DEFAULT_WEBLLM_MODEL, WebGPUUnavailableError, WebLLMPeerMissingError, WebLLMProvider, disposeWebLLMEngines, importWebLLM, isWebGPUAvailable };
package/dist/node.js CHANGED
@@ -1,5 +1,5 @@
1
- import { S as isRateLimitRetryableSoon, _ as ModelNotFoundError, a as DEFAULT_AI_TIMEOUT_MS, b as WebLLMPeerMissingError, d as AIError, f as AI_PROVIDER_TYPES, g as DEFAULT_RATE_LIMIT_MAX_RETRY_DELAY_MS, h as ContextLengthError, i as DEFAULT_AI_MAX_RETRIES, m as ContentFilterError, p as AuthenticationError, r as DEFAULT_AI_GENERATION_LIMITS, v as RateLimitError, x as extractTextContent, y as WebGPUUnavailableError } from "./chunks/usage-yIT5lpQm.js";
2
- import { a as ChatGPTPlanSessionRevokedError, c as ChatGPTPlanWorkspaceError, d as getAI, g as getOpenAI, h as getAIClient, i as ChatGPTPlanProvider, l as AIMessage, m as OpenAIClient, n as AIThread, o as ChatGPTPlanUsageLimitError, p as AIClient, r as ChatGPTPlanError, s as ChatGPTPlanUsageUnavailableError, t as PACKAGE_VERSION_INITIALIZED } from "./chunks/src-CWFnwztw.js";
1
+ import { C as WebGPUUnavailableError, E as isRateLimitRetryableSoon, S as RateLimitError, T as extractTextContent, _ as AuthenticationError, a as DEFAULT_AI_MAX_RETRIES, b as DEFAULT_RATE_LIMIT_MAX_RETRY_DELAY_MS, g as AI_PROVIDER_TYPES, h as AIError, i as DEFAULT_AI_GENERATION_LIMITS, o as DEFAULT_AI_TIMEOUT_MS, v as ContentFilterError, w as WebLLMPeerMissingError, x as ModelNotFoundError, y as ContextLengthError } from "./chunks/usage-B40bJZ49.js";
2
+ import { a as ChatGPTPlanSessionRevokedError, c as ChatGPTPlanWorkspaceError, d as getAI, g as getOpenAI, h as getAIClient, i as ChatGPTPlanProvider, l as AIMessage, m as OpenAIClient, n as AIThread, o as ChatGPTPlanUsageLimitError, p as AIClient, r as ChatGPTPlanError, s as ChatGPTPlanUsageUnavailableError, t as PACKAGE_VERSION_INITIALIZED } from "./chunks/src-EMvAiwjJ.js";
3
3
  import { ValidationError, loadEnvConfig } from "@happyvertical/utils";
4
4
  //#region src/node/factory.ts
5
5
  /**
@@ -104,7 +104,7 @@ async function getAIAuto(options = {}) {
104
104
  return getAI(config);
105
105
  }
106
106
  try {
107
- return await import("./chunks/src-CWFnwztw.js").then((n) => n.u).then((m) => m.getAIAuto(config));
107
+ return await import("./chunks/src-EMvAiwjJ.js").then((n) => n.u).then((m) => m.getAIAuto(config));
108
108
  } catch (_error) {}
109
109
  const hasLiteLLMSignal = Boolean(process.env.LITELLM_BASE_URL || process.env.LITELLM_API_KEY);
110
110
  if (Boolean(process.env.BIFROST_BASE_URL) && !config.type) return getAI({
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Prompt-cache hint helpers shared by the providers that forward
3
+ * `cache_control` (Anthropic and Bifrost).
4
+ */
5
+ import type { AICacheHint, AIMessage } from "./types.js";
6
+ /** Anthropic-format cache breakpoint (`cache_control`). */
7
+ export interface CacheControlWire {
8
+ type: 'ephemeral';
9
+ ttl?: '5m' | '1h';
10
+ }
11
+ /** A text block of a message, with its resolved cache breakpoint. */
12
+ export interface CacheableTextBlock {
13
+ text: string;
14
+ cacheControl?: CacheControlWire;
15
+ }
16
+ /** Wire form of a hint, or `undefined` when the hint is absent. */
17
+ export declare function toCacheControl(hint: AICacheHint | undefined): CacheControlWire | undefined;
18
+ /** Whether the message, or any of its text parts, carries a cache hint. */
19
+ export declare function hasCacheHint(message: AIMessage): boolean;
20
+ /**
21
+ * Text of a message as blocks, each with its own breakpoint. A message-level
22
+ * hint lands on the last non-empty text block unless that block has its own.
23
+ * Empty blocks never carry a breakpoint (providers reject them).
24
+ */
25
+ export declare function toCacheableTextBlocks(message: AIMessage): CacheableTextBlock[];
26
+ //# sourceMappingURL=cache-hint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-hint.d.ts","sourceRoot":"","sources":["../../src/shared/cache-hint.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAmB,MAAM,YAAS,CAAC;AAEvE,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAC5B,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B,gBAAgB,GAAG,SAAS,CAI9B;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,GACjB,kBAAkB,EAAE,CAqBtB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Claude model-family facts shared by the providers that can reach Claude
3
+ * (Anthropic, Bifrost, Bedrock). Model ids are matched anywhere in the id so
4
+ * gateway prefixes (`anthropic/claude-opus-5-5`, `us.anthropic.claude-...`)
5
+ * work.
6
+ */
7
+ import type { AIReasoningOptions } from "./types.js";
8
+ /**
9
+ * Whether the model takes `output_config.effort` (Opus and Sonnet 4.6 and
10
+ * later, Haiku 5 and later, and the Fable and Mythos models). Earlier Claude
11
+ * models have no effort control.
12
+ */
13
+ export declare function claudeSupportsEffort(model: string | undefined): boolean;
14
+ /**
15
+ * Whether `thinking: { type: 'enabled', budget_tokens }` is rejected with a
16
+ * 400. It is removed on Opus and Sonnet 4.7 and later, Haiku 5 and later, and
17
+ * the Fable and Mythos models; Opus and Sonnet 4.6 still accept it
18
+ * (deprecated).
19
+ */
20
+ export declare function claudeRejectsThinkingBudget(model: string | undefined): boolean;
21
+ export type ClaudeEffort = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
22
+ /**
23
+ * Claude `output_config.effort` for an SDK effort. Claude cannot be told "no
24
+ * reasoning" through effort, so `'none'` and `'minimal'` become `'low'`
25
+ * (`'none'` is handled by callers that also drop thinking). Opus and Sonnet
26
+ * 4.6 have no `'xhigh'`, which maps to `'high'` there.
27
+ */
28
+ export declare function toClaudeEffort(model: string | undefined, effort: NonNullable<AIReasoningOptions['effort']>): ClaudeEffort;
29
+ //# sourceMappingURL=claude-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-models.d.ts","sourceRoot":"","sources":["../../src/shared/claude-models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAS,CAAC;AAiClD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYvE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAYT;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEvE;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,WAAW,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,GAChD,YAAY,CAed"}
@@ -1 +1 @@
1
- {"version":3,"file":"continuation.d.ts","sourceRoot":"","sources":["../../src/shared/continuation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,EACb,WAAW,EACX,sBAAsB,EAEvB,MAAM,YAAS,CAAC;AAGjB,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAO3C,eAAO,MAAM,eAAe,iHACoF,CAAC;AAEjH,UAAU,oBAAoB;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,aAAa,EAC9B,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,GAAG;IAC1E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C,GACA,oBAAoB,GAAG,SAAS,CAuBlC;AAmBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,MAAM,CAUR;AAkCD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,EAC3E,eAAe,EAAE,aAAa,EAC9B,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,GAAE,WAAW,GAAG;IAAE,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;CAAO,GACxE,OAAO,CAAC,UAAU,CAAC,CAiDrB;AAED;;;;GAIG;AACH,wBAAuB,sBAAsB,CAC3C,MAAM,EAAE,CACN,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,CAAC,EAAE,WAAW,KAClB,aAAa,CAAC,MAAM,CAAC,EAC1B,eAAe,EAAE,aAAa,EAC9B,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,GAAE,WAAW,GAAG;IAAE,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;CAAO,GACxE,aAAa,CAAC,MAAM,CAAC,CAmEvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,WAAW,EACtD,MAAM,EAAE,CAAC,EACT,eAAe,EAAE,aAAa,EAC9B,OAAO,GAAE,WAAoB,GAC5B,CAAC,CAsDH"}
1
+ {"version":3,"file":"continuation.d.ts","sourceRoot":"","sources":["../../src/shared/continuation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,EACb,WAAW,EACX,sBAAsB,EAEvB,MAAM,YAAS,CAAC;AAGjB,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAO3C,eAAO,MAAM,eAAe,iHACoF,CAAC;AAEjH,UAAU,oBAAoB;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,aAAa,EAC9B,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,GAAG;IAC1E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C,GACA,oBAAoB,GAAG,SAAS,CAuBlC;AAmBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,MAAM,CAUR;AA+CD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,EAC3E,eAAe,EAAE,aAAa,EAC9B,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,GAAE,WAAW,GAAG;IAAE,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;CAAO,GACxE,OAAO,CAAC,UAAU,CAAC,CAiDrB;AAED;;;;GAIG;AACH,wBAAuB,sBAAsB,CAC3C,MAAM,EAAE,CACN,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,CAAC,EAAE,WAAW,KAClB,aAAa,CAAC,MAAM,CAAC,EAC1B,eAAe,EAAE,aAAa,EAC9B,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,GAAE,WAAW,GAAG;IAAE,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;CAAO,GACxE,aAAa,CAAC,MAAM,CAAC,CAmEvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,WAAW,EACtD,MAAM,EAAE,CAAC,EACT,eAAe,EAAE,aAAa,EAC9B,OAAO,GAAE,WAAoB,GAC5B,CAAC,CAsDH"}
@@ -139,6 +139,11 @@ export declare class AnthropicProvider implements AIInterface {
139
139
  * sending a request Anthropic would reject.
140
140
  */
141
141
  private mapThinking;
142
+ /**
143
+ * Builds `output_config` for the effort of Claude 4.6+ models. Other models
144
+ * have no effort control, so the option is not sent to them.
145
+ */
146
+ private mapOutputConfig;
142
147
  private mapTools;
143
148
  private mapToolChoice;
144
149
  private mapFinishReason;
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/anthropic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/bedrock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/bedrock.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/ollama.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -306,6 +306,20 @@ export declare class OpenAIProvider implements AIInterface {
306
306
  cloneVoice(_options: VoiceCloneOptions): Promise<Voice>;
307
307
  designVoice(_options: VoiceDesignOptions): Promise<Voice>;
308
308
  getVoices(_options?: VoiceListOptions): Promise<Voice[]>;
309
+ /**
310
+ * Sets Bifrost's reasoning controls on a chat request and returns any extra
311
+ * headers the request needs.
312
+ *
313
+ * Bifrost's own `reasoning` envelope is forwarded for most models. For
314
+ * Claude 4.6+ models it is not: Bifrost turns `reasoning.max_tokens` into
315
+ * `thinking.budget_tokens`, which those models reject with a 400, and its
316
+ * `reasoning.effort` does not reach `output_config.effort`. Those models
317
+ * get `output_config.effort` (and adaptive thinking) through Bifrost's
318
+ * provider-parameter passthrough instead: `extra_params` in the body plus
319
+ * the `x-bf-passthrough-extra-params` header.
320
+ * @private
321
+ */
322
+ private applyBifrostReasoning;
309
323
  /**
310
324
  * Maps internal AI messages to OpenAI's message format
311
325
  * @param messages - Array of internal AI messages
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/openai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -17,4 +17,9 @@ import type { BaseAIOptions, TokenUsage, UsageEvent } from "../types.js";
17
17
  * @param callTags - Per-call `usageTags` from the method's options.
18
18
  */
19
19
  export declare function emitUsage(providerOptions: BaseAIOptions, providerName: string, operation: UsageEvent['operation'], model: string, usage: TokenUsage | undefined, startTime: number, callTags?: Record<string, string>): void;
20
+ /**
21
+ * Cache and cost fields for a {@link TokenUsage}, only the ones the provider
22
+ * reported (a missing or malformed figure is omitted, never reported as 0).
23
+ */
24
+ export declare function cacheUsageFields(cacheRead: unknown, cacheCreation: unknown, costUsd?: unknown): Pick<TokenUsage, 'cacheReadInputTokens' | 'cacheCreationInputTokens' | 'costUsd'>;
20
25
  //# sourceMappingURL=usage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAU,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,eAAe,EAAE,aAAa,EAC9B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,IAAI,CAoBN"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAU,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,eAAe,EAAE,aAAa,EAC9B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,IAAI,CAoBN;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,OAAO,EAClB,aAAa,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE,OAAO,GAChB,IAAI,CACL,UAAU,EACV,sBAAsB,GAAG,0BAA0B,GAAG,SAAS,CAChE,CASA"}
@@ -1 +1 @@
1
- {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/shared/safety.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/shared/safety.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,sBAAsB,EACvB,MAAM,YAAS,CAAC;AAGjB,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAC7C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,eAE/B,CAAC;AAEF,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AA6BD,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,kBAAkB,CAWlE,CAAC;AAEL,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,IAAI,IAAI,CAAC;IAChB,UAAU,IAAI,OAAO,CAAC;CACvB;AAiBD,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,aAAa,EAC5D,OAAO,EAAE,CAAC,GACT,CAAC,GAAG,uBAAuB,CAwD7B;AAiDD,wBAAgB,oBAAoB,CAClC,CAAC,SAAS,iBAAiB,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,EAED,eAAe,EAAE,aAAa,EAC9B,OAAO,EAAE,CAAC,EACV,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,CAqD1D;AAED,wBAAgB,+BAA+B,CAC7C,CAAC,SAAS,sBAAsB,EAEhC,eAAe,EAAE,aAAa,EAC9B,OAAO,EAAE,CAAC,EACV,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAcnB;AAED,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,aAAa,EAC9B,cAAc,GAAE,iBAAsB,GACrC,uBAAuB,CAiCzB;AAWD,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,aAAa,EAC9B,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,GACA,IAAI,CAUN;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,UAAU,UAAQ,GACjB;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAuBjD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,eAAe,EAAE,aAAa,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,kBAAkB,CAAC;IAC9B,WAAW,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IACzE,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAyBA;AA0GD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EACpD,MAAM,EAAE,CAAC,EACT,eAAe,EAAE,aAAa,GAC7B,CAAC,CAwHH"}